按照系统V ABI用于x86,esp应在被人指指点点argc时进入main。但是,我已经看到许多二进制文件argc是从esp + 4, 或 中检索的esp + 8。这是正确的,还是我错过了什么?另外,为什么这些偏移量不同?
x86 ELF - 堆栈上的 argc 位置?
逆向工程
部件
x86
2021-07-08 11:19:21
1个回答
我认为您的困惑源于这样一个事实,即规范的引用部分正在谈论流程入口点,这是与 Cmain函数不同的概念。该main是由C库启动代码调用,所以它会按照标准调用序列,而不是“头文字处理堆栈布局”。对于 386,这意味着argc它将是返回地址之后在堆栈上传递的第一个值,并且argv将是第二个。即在开始时main,布局将如下所示
| |
+----------------+
| argv | <-- esp+8
+----------------+
| argc | <-- esp+4
+----------------+
| return address | <-- esp
+----------------+
如果编译器决定使用帧指针,那么argc通常会[ebp+8]因为保存的ebp.
其它你可能感兴趣的问题
