首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'callq *(%rax)‘是什么意思?

'callq *(%rax)‘是什么意思?
EN

Stack Overflow用户
提问于 2019-07-10 23:24:45
回答 1查看 4.5K关注 0票数 3

我正在一个gdb会议上分析一次死后的崩溃。我正在查看一个函数的反汇编输出,我看到如下:

代码语言:javascript
运行
复制
=> 0x00007f8d354aed52 <+50>:    callq  *(%rax)

=>表示这是崩溃时调用的指令。因此,我在*(%rax)调用函数时遇到了一个seg错误。我对装配很陌生。我看到寄存器周围的父母亲意味着尊重(获取地址的值)。因此,(%rax)意味着获取当前存储在%rax中的指针的值。星星装饰是用来做什么的?这是否进一步取消了该值的引用(因此,(%rax)本身就是一个指针)?我在谷歌*(程序集语法时遇到了麻烦。

这是GCC 4.8编译x64代码生成的C++程序集。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 23:30:35

星号表示调用是间接调用。这是为了区分call foo (调用函数foo)和call *foo (存储在变量foo中的调用函数)。指令callq *(%rax)从存储在rax中的地址加载一个四字(64位),并调用从该四字开始的函数。

有关语法的详细信息,请参阅GNU汇编程序手册。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56979796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档