一尘不染

汇编中的Linux 64命令行参数

linux

该描述对Linux
32位有效:Linux程序启动时,所有指向命令行参数的指针都存储在堆栈中。参数的数目存储在0(%ebp),程序的名称存储在4(%ebp),参数从8(%ebp)开始存储。

我需要64位相同的信息。

编辑:我有一个工作代码示例,该示例显示了如何使用argc,argv [0]和argv
[1]:http :
//cubbi.com/fibonacci/asm.html

.globl _开始
_开始:
    popq%rcx#这是argc,一个参数必须为2
    cmpq $ 2,%rcx
    jne usage_exit
    addq $ 8,%rsp#跳过argv [0]
    popq%rsi#获取argv [1]
    呼叫...
...
}

看起来参数在堆栈上。由于此代码不清楚,因此我提出了这个问题。我的猜测是,我可以将rsp保留在rbp中,然后使用0(%rbp),8(%rbp),16(%rbp)等访问这些参数。这正确吗?


阅读 249

收藏
2020-06-07

共1个答案

一尘不染

就像已经提到的System V AMD64 ABI中的3.4
进程初始化
部分,特别是图3.9一样,它准确地描述了您想知道的内容。

2020-06-07