2016-02-04 2 views
1

Я хотел бы проверить, как работает аппаратное обеспечение, если я пытаюсь записать в сегмент (например, сегмент данных, отличный от DS, возможно, GS) только для целей тестирования ... Есть ли сборка инструкции, которые позволяют мне указать сегмент wit.h смещение и напрямую написать ему?Запись в сегмент в x86

ответ

1

Для записи в определенный сегмент вы должны сначала загрузить номер сегмента в регистр сегментов, а затем выполнить загрузку с соответствующим префиксом сегмента. Например, чтобы получить доступ к 0x1234:0x5678, вы можете сделать что-то вроде этого (в AT & T-синтаксис):

push $0x1234 
pop %es 
mov %es:0x5678,%eax 
+0

Благодаря @FUZxxl для воспроизведения, но я до сих пор путаются 1 вещь. Не является ли команда mov просто обновлять регистр сегментов новым селектором, я имею в виду, что такое diffrence, если я сделал это (mov% es,% eax) из этого с prefeix? Использует ли prefeix фактически запись внутри сегмента? Потому что я в основном хочу писать внутри сегмента, я сам не просто обновляю сегментную рег. с новым селектором. –

+0

@ user2628079 Первая инструкция подталкивает значение в стек, вторая команда загружает это значение в регистр сегмента. Это потому, что нет команды 'mov $ 0x1234,% es'. Третья команда извлекала четыре байта в addres '0x5678' в сегменте, описанном'% es', и хранит их в '% eax'. Обратите внимание, что я использую AT & T-синтаксис здесь. Если вы более знакомы с синтаксисом Intel, я могу обновить пример использования синтаксиса Intel. – fuz

Смежные вопросы