【发布时间】:2012-04-04 03:14:00
【问题描述】:
要在 Mac OS X 上的 x86_64 中获取命令行参数,我可以执行以下操作:
_main:
sub rsp, 8 ; 16 bit stack alignment
mov rax, 0
mov rdi, format
mov rsi, [rsp + 32]
call _printf
格式为“%s”。 rsi 设置为 argv[0]。
因此,我从中画出了(我认为)堆栈最初的样子:
top of stack
<- rsp after alignment
return address <- rsp at beginning (aligned rsp + 8)
[something] <- rsp + 16
argc <- rsp + 24
argv[0] <- rsp + 32
argv[1] <- rsp + 40
... ...
bottom of stack
等等。抱歉,如果这很难阅读。我想知道[东西]是什么。经过几次测试,我发现它通常只是 0。然而,偶尔,它是一些(看似)随机数。
另外,你能告诉我我的堆栈图的其余部分是否正确吗?
【问题讨论】:
标签: assembly stack command-line-arguments x86-64