- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 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/
我知道 callq 是什么指令确实;在 this answer 中有描述.该指令应有一个参数,即被调用函数的地址。 但是,在反汇编目标文件时,我看到以下行显示 callq具有两个值而不是一个参数的指令
我有一些由工具生成的 x86_64 架构的 gnu 汇编代码,有以下说明: movq %rsp, %rbp leaq str(%rip), %rdi callq puts movl $0, %eax
我正在 gdb session 中分析事后崩溃。我正在查看函数的反汇编输出,我看到了: => 0x00007f8d354aed52 : callq *(%rax) => 表示这是崩溃时调用的指
我有一些模板繁重的 C++ 代码,我想确保编译器尽可能优化,因为它在编译时具有大量信息。为了评估它的性能,我决定看一下它生成的目标文件的反汇编。下面是我从 objdump -dC 中得到的片段: 00
我有一些模板繁重的 C++ 代码,我想确保编译器尽可能优化,因为它在编译时拥有大量信息。为了评估它的性能,我决定看看它生成的目标文件的反汇编。下面是我从 objdump -dC 得到的片段: 0000
我正在 CentOS 7.9 上使用 crash 实用程序调试内核 oops (vmcore),我有一个函数 foo,它调用回调,但是当我反汇编 foo 时,我没有看到引用回调的 callq 指令,我
在我的 Linux 程序中,我需要一个函数,它接受地址 addr 并检查位于 addr 的 callq 指令是否正在调用从共享库加载的特定函数func。我的意思是,我需要检查 addr 处是否有类似
我是一名优秀的程序员,十分优秀!