gpt4 book ai didi

assembly - 'callq *(%rax)' 是什么意思?

转载 作者:行者123 更新时间:2023-12-04 15:43:10 27 4
gpt4 key购买 nike

我正在 gdb session 中分析事后崩溃。我正在查看函数的反汇编输出,我看到了:

=> 0x00007f8d354aed52 <+50>:    callq  *(%rax)

=> 表示这是崩溃时调用的指令。所以我在 *(%rax) 调用函数时遇到段错误。我对组装很陌生。我看到寄存器周围的括号意味着尊重该地址(获取值)。因此(%rax)的意思是获取当前存储在%rax中的指针的值。星星装饰在上面有什么作用?这是否会进一步取消引用该值(因此 (%rax) 本身就是一个指针)?我在谷歌搜索 *( 汇编语法时遇到问题。

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

最佳答案

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

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

关于assembly - 'callq *(%rax)' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56979796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com