0x00 前言
在没有源码的情况下,查看汇编指令
0x01 gdb 命令
方法1. display
查看当前执行及后20行汇编指令
(gdb) display /20i $pc
方法2. layout
使用gdb的TUI模式,调出汇编指令窗口配合调试。
(gdb) layout asm
效果如下
┌───────────────────────────────────────────────────────────────────────────┐
│0x7ffff740d756 <__libc_start_main+214> mov 0x39670b(%rip),%rax #│
│0x7ffff740d75d <__libc_start_main+221> mov 0x8(%rsp),%rsi │
│0x7ffff740d762 <__libc_start_main+226> mov 0x14(%rsp),%edi │
│0x7ffff740d766 <__libc_start_main+230> mov (%rax),%rdx │
│0x7ffff740d769 <__libc_start_main+233> callq *0x18(%rsp) │
>│0x7ffff740d76d <__libc_start_main+237> mov %eax,%edi │
│0x7ffff740d76f <__libc_start_main+239> callq 0x7ffff7427970 <exit> │
│0x7ffff740d774 <__libc_start_main+244> xor %edx,%edx │
│0x7ffff740d776 <__libc_start_main+246> jmpq 0x7ffff740d6b9 <__libc_start│
│0x7ffff740d77b <__libc_start_main+251> mov 0x39ca2e(%rip),%rax #│
│0x7ffff740d782 <__libc_start_main+258> ror $0x11,%rax │
│0x7ffff740d786 <__libc_start_main+262> xor %fs:0x30,%rax │
│0x7ffff740d78f <__libc_start_main+271> callq *%rax │
└───────────────────────────────────────────────────────────────────────────┘
multi-thre process 3718 In: __libc_start_main Line: ?? PC: 0x7ffff740d76d
#3 0x00007ffff7466eb5 in _IO_do_write () from /lib/x86_64-linux-gnu/libc.so.6
#4 0x00007ffff74671ff in _IO_file_overflow ()
from /lib/x86_64-linux-gnu/libc.so.6
#5 0x0000000000408756 in ?? ()
#6 0x0000000000403980 in ?? ()
#7 0x00007ffff740d76d in __libc_start_main ()
from /lib/x86_64-linux-gnu/libc.so.6
(gdb)
个人感觉没有gdb-peda好用,但是江湖救急还是不错的。
方法3. layout增强版
先执行layout split
再执行layout asm
, 这样便可以上下滚动,当然,有时后只按<up>键也会卡住,需要配合<PgUp>键效果更佳。
0x02 缺陷
如何查看当前汇编前面的内容?
使用方法1,可以直接计算$pc
的绝对地址,并减去n,即可向前查看。然而,这个n不是任意值,如果不正确,对于变长的汇编指令集来说会显示错误的汇编指令。
使用方法2, 不能向前滚动。针对这个问题,我们可以使用衍生的方法3。
0x03 Tips
- gdb的TUI模式类似screen,退出使用
Ctrl -x a
- TUI模式查看寄存器的命令为:
layout regs
display /10i $pc
的方法与x /10i $pc
在打印汇编上是同义的
0x04 参考文献
https://stackoverflow.com/questions/1902901/show-current-assembly-instruction-in-gdb
https://stackoverflow.com/questions/26572805/gdb-tui-scroll-assembly-view-above-current-instruction