该描述对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)等访问这些参数。这正确吗?
就像已经提到的System V AMD64 ABI中的3.4 进程初始化 部分,特别是图3.9一样,它准确地描述了您想知道的内容。