1.反汇编相关
1.1 设定intel汇编
gdb 默认是att汇编,可通过以下指令进行转换
set disassembly-flavor intel
从配置文件上进行设置也可以
echo "set disassembly-flavor intel" > ~/.gdbinit
1.2 当前运行代码反汇编
disassemble
1.3 反汇编特定函数
disassemble /m main
/m 可以现实对应的源码
如果在gdb外的话直接使用objdump -S 也是可以看到对应的源码的
1.4 对特定行进行反汇编
先使用info line 找到行对应的汇编地址,比如要找 agora.cpp:308, 看到start address 0x7f51ff963634 和 end address 0x7f51ff963656 , 就是对应的汇编程序段
(gdb) info line agora.cpp:308
Line 308 of "agora.cpp" starts at address 0x7f51ff963634 <rtm_recv_channel_msg(void*, void*)+132> and ends at 0x7f51ff963656 <rtm_recv_channel_msg(void*, void*)+166>
然后使用disassemble 直接查看该段内存(该功能对gdb版本有要求)
disassemble 0x7f51ff963634 0x7f51ff963656
也可以使用x查看内存的方式进行查看
x/i 0x7f51ff963634
/i 表示按照指令地址格式
2.layout相关
常用
源码汇编对应调试
layout split
显示所有寄存器
layout regs
退出layout
ctrl+x a
2.1 layout常用
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。
3.内存
3.1 内存查看
格式: x /nfu <addr>
n: 查看的number
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
在x86平台下,内存是默认小端的,对于存储的int 变量或指针,使用x查看的时候都要倒着读,详情请见ref5
ref
1.GDB 单步调试汇编_cnblogs
2.layout 的使用
3.disasemble的使用
4.gdb x的用法
5.gdb x查看大小端