为什么除了最后一帧之外,每一帧都没有调用命令
Why isn't a call command at each frame of disassemble except the last
我正在通过 gdb 的反汇编输出分析一个核心事后分析。我是新手,所以我对我正在看的东西的理解仍在增长。对我来说,一个直接的困惑是,当我在帧之间移动并查看反汇编输出时,我没有看到 callq 命令作为正在运行的命令,就像我对所有非帧 0 帧所期望的那样。导致第 0 帧的每个帧不应该调用一个函数吗?
(gdb) f 0
(gdb) disassemble
...
=> 0x0000000001b0af10 <+16>: mov (%rdi),%rdx
...
End of assembler dump.
(gdb) info registers rdi
rdi 0x0 0
有道理:崩溃是由于空 ptr 取消引用而发生的。现在让我们声名鹊起,看看那里的反汇编输出:
(gdb) up
(gdb) disassemble
...
=> 0x0000000001b1c01b <+315>: test %al,%al
...
什么?上面的框架正在运行测试?它不应该调用在第 0 帧中反汇编的函数吗?我误解了什么?
这是从 GCC 4.8 编译C++代码生成的 x64 程序集。
我误解了什么?
在x86
(和x86_64
(,CALL
指令将下一条指令的地址推送到堆栈上,并跳转到被调用的函数。
当你去up
时,当前指令是你刚刚从返回中升级的帧之后将执行的指令。
查看实际CALL
,请x/i $pc-5
(注意:-5
适用于大多数,但不是所有CALL
。请参阅下面的彼得·科德斯评论(。
相关文章:
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- C++ 尝试优化每一帧将数据打印到二进制文件
- 当我在每一帧中多次使用正则表达式时,FPS 下降了
- 我应该只在免费商店上为一次调用创建对象吗?
- 为什么除了最后一帧之外,每一帧都没有调用命令
- 如果初始化需要shared_from_this,如何在一次调用中构建一个类
- GoogleMock:如何保存参数,以便在模拟上的下一次调用中使用
- 为什么有必要为每个帧调用OmsetRenderTargets DirectX方法
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- Qt QWizard validateCurrentPage 未在最后一页调用
- C++ 向量元素被最后一次调用push_back替换
- WinApi 在每一帧中绘制
- Opencv 视频帧.我只能看到最后一帧
- 访问视频的每一帧并对其进行处理
- Qt:显示实时视频,一次一帧
- Haar检测-保存图像的Mat,以便获得并显示前一帧
- 在一次调用C++11中启动多个线程
- OpenCV - 如何在局域网中的单独主机中处理视频的每一帧
- 如何只执行一次方法代码,尽管每帧调用一次