要在 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。然而,偶尔,它是一些(看似)随机数。
另外,你能告诉我我的堆栈图的其余部分是否正确吗?