我是新来的程序集,我刚刚熟悉了调用堆栈,所以对我一无所知。为了获得在Mac OS X中x86_64的命令行参数,我可以做到以下几点: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.然而,偶尔它是一些(看似)随机数。
编辑:另外,你能告诉我,如果我的堆栈绘图的其余部分是正确的?
是啊,那更有意义。但是,为什么当我这样做: “** mov r10,[rsp + 32] **”然后 “** add r10,8 **” 然后将r10传递给printf,我得到段错误?这应该是argv [1],对吧? – 2012-04-04 05:53:44
等等,我的**错误**。我认为argv实际上是“rsp + 40”,而不是32。我现在很困惑,但感谢您的帮助! – 2012-04-04 06:03:55