x86 ELF - 堆栈上的 argc 位置?

逆向工程 部件 x86
2021-07-08 11:19:21

按照系统V ABI用于x86esp应在被人指指点点argc时进入main但是,我已经看到许多二进制文件argc是从esp + 4, 或 中检索的esp + 8这是正确的,还是我错过了什么?另外,为什么这些偏移量不同?

图 3-31

1个回答

我认为您的困惑源于这样一个事实,即规范的引用部分正在谈论流程入口点,这是与 Cmain函数不同的概念main是由C库启动代码调用,所以它会按照标准调用序列,而不是“头文字处理堆栈布局”。对于 386,这意味着argc它将是返回地址之后在堆栈上传递的第一个值,并且argv将是第二个。即在开始时main,布局将如下所示

|                |
+----------------+
| argv           | <-- esp+8
+----------------+
| argc           | <-- esp+4
+----------------+
| return address | <-- esp
+----------------+

如果编译器决定使用帧指针,那么argc通常会[ebp+8]因为保存的ebp.