1、gdb调试工具
gcc -g -o sum sum.c
gdb ./sum
调试命令:
file –> 指定调试文件
list/l –> 查看原代码(默认10行)
list n –> 列出n附近的10行代码
run/r –> 运行
break/b –> 设置断点 如: b main b 10
info breakpoints/i b –> 查看所有的断点
delete breakpoints <Breakpoint Number>/d b number–> 删除断点
next/n –> 单步运行下一行代码(遇到函数调用不会进入函数内运行)
step/s –> 单步运行下一行代码(遇到函数调用会进入函数内运行)
print/p
set variable 变量名=值
until/u 26 –> 跳到某行
finish –> 跳出函数(finish不能简写成f)
quit/q –> 退出gdb
display /i $pc
同时显示c代码和汇编代码
disassemble 函数名
查看指定函数的反汇编代码
1) 查看寄存器
info registers或者i r
查看寄存器的情况
info all-registers或者i r a
查看所有寄存器的情况
info registers eip或者p $eip
查看指定寄存器
2) 查看内存
(gdb) x /x 0x80040000 # 以16进制显示指定地址处的数据
(gdb) x /s 0x86468700 # 以字符串形式显示指定地址处的数据
(gdb) x /d 0x86468700 # 以十进制形式显示指定地址处的数据
(gdb) x /o 0x86468700 # 以八进制形式显示指定地址处的数据
(gdb) x /t 0x86468700 # 以二进制形式显示指定地址处的数据
(gdb) x /d $ebp-0x8 # 以十进制形式显示寄存器ebp中的值减去0x8后地址处的数据
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
3) 修改寄存器的值
(gdb) set $v0 = 0x004000000
(gdb) set $epc = 0xbfc00000
4) 修改内存的值
(gdb) set {unsigned int}0x8048a51=0x0
2、objdump工具
objdump -xd sum.o
objdump -xd sum
将.o目标文件或可执行文件进行反汇编