gdb - 在使用 gdb 的指令中间反汇编?
问题描述
我相信这在以前很有效,但也许我只是忘记了正确的语法。
(gdb) disas main
Dump of assembler code for function main:
0x0000000000001125 <+0>: push rbp
0x0000000000001126 <+1>: mov rbp,rsp
0x0000000000001129 <+4>: mov DWORD PTR [rbp-0x4],edi
0x000000000000112c <+7>: mov QWORD PTR [rbp-0x10],rsi
0x0000000000001130 <+11>: mov eax,0x0
0x0000000000001135 <+16>: pop rbp
0x0000000000001136 <+17>: ret
现在我想在 0x0000000000001127 处反汇编,这是第一个 mov 指令的 1 个字节:
(gdb) disas 0x0000000000001127
Dump of assembler code for function main:
0x0000000000001125 <+0>: push rbp
0x0000000000001126 <+1>: mov rbp,rsp
0x0000000000001129 <+4>: mov DWORD PTR [rbp-0x4],edi
0x000000000000112c <+7>: mov QWORD PTR [rbp-0x10],rsi
0x0000000000001130 <+11>: mov eax,0x0
0x0000000000001135 <+16>: pop rbp
0x0000000000001136 <+17>: ret
它仍然在 main 的顶部开始反汇编。
我也尝试过诸如 main+1、disas /r 等。gdb 的行为是否发生了某种变化?我想也许这与这是一个 PIE 二进制文件有关,但是当我用 -no-pie 重新编译它时,我仍然遇到这个问题,因为它很简单。
什么是正确的语法?
解决方案
它仍然在 main 的顶部开始反汇编。
当你给出disas
一个参数时,它会找到封闭的函数,并反汇编整个函数。这是自古以来的行为。
如果你给出disas
两个参数,那么它只会反汇编给定的范围:
(gdb) disas &main
Dump of assembler code for function main:
0x00000000000005fa <+0>: push %rbp
0x00000000000005fb <+1>: mov %rsp,%rbp
0x00000000000005fe <+4>: mov $0x0,%eax
0x0000000000000603 <+9>: pop %rbp
0x0000000000000604 <+10>: retq
End of assembler dump.
(gdb) disas &main+3,&main+11
Dump of assembler code from 0x5fd to 0x605:
0x00000000000005fd <main+3>: in $0xb8,%eax
0x00000000000005ff <main+5>: add %al,(%rax)
0x0000000000000601 <main+7>: add %al,(%rax)
0x0000000000000603 <main+9>: pop %rbp
0x0000000000000604 <main+10>: retq
End of assembler dump.
你也可以使用x/i
:
(gdb) x/4i &main+3
0x5fd <main+3>: in $0xb8,%eax
0x5ff <main+5>: add %al,(%rax)
0x601 <main+7>: add %al,(%rax)
0x603 <main+9>: pop %rbp
推荐阅读
- angular8 - ag-grid:当列可编辑时如何在 ag-grid 中获取旧值和新值
- java - 我可以在 POI 库的 CellRangeAddressList 中传递列地址列表吗?
- windows - 如何发送电子邮件,因为我有很多错误。谢谢
- javascript - 如何将状态设置为过滤项目反应
- javascript - 无法通过脚本中的 v-html 呈现内容
- java - https 用于本地网络上的(java + angular)开发环境会导致 CORS
- python - 使用 cython 对 C++ 向量进行排序
- java - JAVA SOAP:签名 SOAP 消息的问题
- node.js - Firestore,使用快照获取文档 ID
- python - 水平条形图中组之间的空间