0%

AT&T汇编指令enter, leave, call, ret

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
2
pushl %ebp        # 将%ebp压栈, pushl就相当于intel汇编中的push dword
movl %esp %ebp # 将%esp保存到%ebp, 这两步是函数的标准开头

leave指令

在AT&T汇编中,leave等效于以下汇编指令:

1
2
movl %ebp, %esp
popl %ebp

call指令

在AT&T汇编中,call foo(foo是一个标号)等效于以下汇编指令:

1
2
pushl %eip
movl f, %eip

ret指令

在AT&T汇编中,ret等效于以下汇编指令:

1
popl %eip