当前位置: 首页 > 面试题库 >

汇编中的Linux 64命令行参数

翁翰墨
2023-03-14
问题内容

该描述对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一样,它准确地描述了您想知道的内容。



 类似资料:
  • 使用JSDoc最基本的,像这样使用: `/path/to/jsdoc yourSourceCodeFile.js anotherSourceCodeFile.js ...` 其中...是生成文档文件的路径。 此外,可以提供一个 [Markdown file][md-file](以“.md”结尾)或者一个名为“README”文件的路径,它将被添加到文档的头部。请参见[these instructio

  • 为了方便起见,我们支持在运行 Blade 应用的时候修改一些配置,比如我在运行时指定端口: java -jar blade-app.jar --server.port=9088 当然还支持一些其他的命令行参数,看看下面的表格: 命令行参数 描述 示例 server.address 服务地址,默认是本机 0.0.0.0 回环地址 --server.address=192.168.1.100 serv

  • 1.2. 命令行参数 大多数的程序都是处理输入,产生输出;这也正是“计算”的定义。但是, 程序如何获取要处理的输入数据呢?一些程序生成自己的数据,但通常情况下,输入来自于程序外部:文件、网络连接、其它程序的输出、敲键盘的用户、命令行参数或其它类似输入源。下面几个例子会讨论其中几个输入源,首先是命令行参数。 os包以跨平台的方式,提供了一些与操作系统交互的函数和变量。程序的命令行参数可从os包的Ar

  • '-m' 选项 显示所有编译的模块,自1.4.0以来,Tengine支持动态模块,static表示静态编译,shared表示动态编译(后面接的是动态模块的版本)。下面是例子: $ nginx -m Tengine version: Tengine/1.4.1 (nginx/1.2.3) loaded modules: ngx_core_module (static) ng

  • V2Ray V2Ray 的程序文件的命令行参数如下: v2ray [-version] [-test] [-config=config.json] [-format=json] -version 只输出当前版本然后退出,不运行 V2Ray 主程序。 -test 测试配置文件有效性,如果有问题则输出错误信息,不运行 V2Ray 主程序。 -config 配置文件路径,可选的形式如下: 本地路径,可

  • 所有标志都是可选的,但是有些必须跟指定标志组合使用才生效。 标志 默认 描述 示例 --shell null 进入 REPL 模式 --allow-cors false 打开 CORS 兼容模式,这将允许从托管在任何域中的网站内连接到 Appium 服务器。启用此功能时要小心,因为如果您访问的网站使用跨域请求,在 Appium 服务器上启动或运行内省会话,则可能存在安全风险。 --ipa null