2013-06-11 3 views
0

Может кто-нибудь помочь мне понять эту команду:ассемблера адресации в AT & T

mov %esp,%edi 

lea 0x10(%edi),%esi 

первым загружает адрес esp в edi. , тогда я загружаю значение edi+10, то есть адрес esp+10 - esi. Но что это значит для стека? Если я сделаю толчок, я напишу 4 байта в стеке, верно? И если я скачу 10 байт обратно в свой стек, где это?

|______|   # here? 
|______| 
|______| 
|______| 
|______| 
|______| 
|______| 
|___*__|   # or at the position of the star? 
|______|   # 4 Byte 
|______|   # also 4 Byte long... 
|______| <---%edi 
+1

'0x10 == 16' для записи ... – twalberg

+0

и 16/4 - 4 4-байтовых слова .... – AShelly

ответ

0

Вы находитесь на x86, а не x64, правильно? Я собираюсь предположить это.

«Что это значит для стека?»

mov %esp,%edi 
lea 0x10(%edi),%esi 

Этот код не будет иметь никакого влияния на ваши операциях стеки (push, pop, ЭСТ). Это потому, что операции стека работают в регистре esp в качестве указателя стека. Вышеприведенный код не меняет esp, так что, насколько это касается стека, ничего не меняется.

"Если я толчок, я пишу 4 байта в стеке, не так ли?":

Не обязательно. x86 поддерживает push-операции с 16-битными и 32-разрядными операндами, поэтому количество байтов, которые вы пишете в стеке, зависит от размера того, что вы нажимаете. Например:

push %ax ; will push 2 bytes on the stack (sizeof(ax) == 2) 
push %eax ; will push 4 bytes on the stack (sizeof(eax) == 4) 

Обратите внимание, что нажать и вычитает esp по sizeof(op1).

«И если я скачу 10 байт обратно в свой стек, где это точка?»

Команда lea на esi не изменит указатель стека. Таким образом,

nop     ; 10 points back on the stack here 
mov %esp,%edi  
lea 0x10(%edi),%esi 
nop     ; will be the exact same location as here. 
         ; relative to esi, this location is (esi - 26) 
Смежные вопросы