gpt4 book ai didi

linux - 为什么 main() 函数的 argc 在 ESP+4 而不是 ESP+0?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:56 26 4
gpt4 key购买 nike

根据互联网上的许多教程,据说您可以找到以下结构的命令行参数:

table

然而,在花一些时间测试我为 NASM 编写的汇编代码后,我发现 ESP 的值是一些数字,例如:

-144807325

实际参数计数存储在更远的 4 个字节处,即 ESP+4。

知道 ESP+0 存储了什么吗?为什么这与许多教授汇编的文章不同?

您可以在下面找到我重现此问题的代码:

section .data
msg db "%d", 0xA

section .text
global main
extern printf

main:
push dword [esp + 0] ; or [esp + 4]
push msg
call printf
pop eax
pop eax
mov eax, 0
ret

最佳答案

您提到的教程讨论了初始流程启动。 main 并未在此时运行,稍后将根据标准 C 调用约定由 C 启动代码调用。因此,在 [esp] 您有返回地址。另见 Linux x86 Program Start Up or - How the heck do we get to main()? by Patrick Horgan

关于linux - 为什么 main() 函数的 argc 在 ESP+4 而不是 ESP+0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com