汇编中的Linux 64命令行参数

发布于 2021-02-01 16:46:03

该描述对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)等访问这些参数。这正确吗?

关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

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



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看