AT&T汇编指令enter, leave, call, ret
https://blog.csdn.net/kingzone_2008/article/details/44544285 AT&T汇编指令enter、leave、call、ret
压栈pushl时, 增长方向: 高地址->低地址
esp内容 %esp = %esp - 4
然后, 新的内存空间: (%esp), (%esp)+1, (%esp)+2, (%esp)+3 被填充指定的操作数
note: 8086 16 bit机器的push
sp内容 sp = sp - 2
然后, 新的内存空间: [ss:sp], [ss:sp+1] 填充指定的操作数
esp大小4B, sp大小2B
esp功能等效ss:sp
出栈popl时
指定的操作数 被(%esp), (%esp)+1, (%esp)+2, (%esp)+3 填充
esp内容 %esp = %esp + 4
note: 8086 16 bit机器的pop
指定的操作数被 [ss:sp], [ss:sp+1] 填充
sp内容 sp = sp - 2
enter指令
在AT&T汇编中,enter等效于以下汇编指令:
1 | pushl %ebp # 将%ebp压栈, pushl就相当于intel汇编中的push dword |
leave指令
在AT&T汇编中,leave等效于以下汇编指令:
1 | movl %ebp, %esp |
call指令
在AT&T汇编中,call foo(foo是一个标号)等效于以下汇编指令:
1 | pushl %eip |
ret指令
在AT&T汇编中,ret等效于以下汇编指令:
1 | popl %eip |