我想了解有关堆栈和基指针的更多信息。以下示例汇编代码来自IA32上由gcc编译的二进制文件的objdump。
08048e0b <func_3>:
8048e0b: 55 push %ebp
8048e0c: 89 e5 mov %esp,%ebp
8048e0e: 83 ec 28 sub $0x28,%esp
8048e11: 8d 45 f0 lea -0x10(%ebp),%eax
8048e14: 89 44 24 0c mov %eax,0xc(%esp)
8048e18: 8d 45 f4 lea -0xc(%ebp),%eax
8048e1b: 89 44 24 08 mov %eax,0x8(%esp)
8048e1f: c7 44 24 04 65 9b 04 movl $0x8049b65,0x4(%esp)
我知道基指针%ebp
用于引用函数参数和局部变量。通常,正偏移是传递给函数的参数,负偏移是局部变量?
在8048e18: 8d 45 f4 lea -0xc(%ebp),%eax
行上什么是-0xc(%ebp)指的是什么?
答案 0 :(得分:7)
该函数的参数基于(%ebp) + (positive value)
,在您的情况下,您有1个参数。
和(%ebp) - (positive value)
是局部变量,在你的情况下你有2个。
您也可以阅读calling convention。