gdb汇编跟踪调试与objdump查看汇编代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(gdb) disas /r 0x401365,0x401370
Dump of assembler code from 0x401365to 0x401370:
=> 0x00401365: c7 44 24 1c 44 13 40 00
movl
0x0040136d: 8b 44 241c mov 0x1c(%esp),%eax
e8 9d 08 00 00 call 0x401c20 <printf>
x/8gx 0xabc
0x00401367: 0000 add BYTE PTR [eax],al
0x00401369: 44 inc esp
0x0040136a: 13 4000
adc eax,DWORD PTR [eax+0x0]
0x0040136d: 8b 44 241c mov eax,DWORD PTR [esp+0x1c]
End of assembler dump.
(gdb) p /x *(int*)0x401365
$1 = 0x1c2444c7
来自百度文库
$0x401344,0x1c(%esp)
(gdb) p *(int*)0x401365 = 1
$2 = 1
(gdb) disas /r 0x401365,0x401370
Dump of assembler code from 0x401365to 0x401370:
0x00401371 <main+26>:
ff d0 call *%eax
0x00401373 <main+28>:
89 44 24 04 mov %eax,0x4(%esp)
0x00401377 <main+32>:
c7 04 24 24 30 40 00 movl $0x403024,(%esp)
如果调试一个 stripped 的程序,就只有依赖地址了: b *0x00401365 设置断点,这个地址与没有 stripped 的程序相同 watch *(int*)0x00401369 设置硬件断点 ni -- 下一条指令,n 命令是无法使用的。 si -- 单步指令,s 命令也是无法使用的。 disas start_addr,end_addr 反汇编[start_addr,end_addr]之间的指令 x /3i $pc 查看 eip 开始的三条指令
o 没有调试符号的实例 假设 gcc t.c (gdb) b *0x401365 Breakpoint 1 at 0x401365 (gdb) r Starting program: F:\work/a.exe [New Thread 1752.0x560]
Breakpoint 1, 0x00401365 in ?? ()
gdb 汇编跟踪调试与 objdump 查看汇编代码
使用 objdump 生成可读性好的汇编代码
g++ -g3 secret.cpp -o secret objdump -SIz secret -j .text > secret.s man objdump ================ 常用命令: 如何跳出 for 循环 -- until 行号 如何在多重循环中监视某变量变化情况 -- watch + until 打印数组 a 的前 10 个元素 -- p
ff d0 call *%eax
0x00401373 <main+28>:
89 44 24 04 mov %eax,0x4(%esp)
0x00401377 <main+32>:
c7 04 24 24 30 40 00 movl $0x403024,(%esp)
0x0040137e <main+39>:
=> 0x00401365: 01 00 add %eax,(%eax)
0x00401367: 0000 add %al,(%eax)
0x00401369: 44 inc %esp
0x0040136a: 13 4000
adc 0x0(%eax),%eax
0x0040136d: 8b 44 241c mov 0x1c(%esp),%eax
End of assembler dump.
o 有调试符号的实例:
假设 gcc -g t.c
gdb a.exe
(gdb) set disassemble-next-line on
。。。
(gdb) ni
10
printf("%d\n",f());
=> 0x0040136d<main+22>:
8b 4424 1c mov 0x1c(%esp),%eax
o GDB 反汇编命令 set disassembly-flavor 设置 ATT 或 INTEL 格式 set disassemble-next-line 设置下一步是否显示汇编码 disas function_name 反汇编函数 function_name info line function_name 查看 function_name 开始和结束地址
End of assembler dump.
(gdb) set disassembly-flavor intel
(gdb) disas /r 0x401365,0x401370
Dump of assembler code from 0x401365to 0x401370:
=> 0x00401365: 01 00 add DWORD PTR [eax],eax
0x0040137e <main+39>:
e8 9d 08 00 00 call 0x401c20 <printf>
(gdb) ni
0x00401371
10
printf("%d\n",f());
0x0040136d <main+22>:
8b 4424 1c mov 0x1c(%esp),%eax
=> 0x00401371<main+26>:
相关文档
最新文档