全部博文(1159)
分类: C/C++
2015-10-15 11:55:57
将可执行程序用gdb program_name调用到内存中后,就可以利用gdb的反汇编命令调试程序了。常用命令如下:
(1)设置反汇编的代码为intel格式
gdb默认反汇编为att格式的指令。可以通过show disassembly-flavor查看。如果习惯intel格式的,用命令
set disassembly-flavor intel设置。
(2)反汇编命令disas/disass/disassemble
功能:将内存中的机器码程序以指令助记符的形式显示出来。
格式: disas/disass/disassemble 函数名/起始地址[,结束地址]
例如:
disas main,显示main函数对应的汇编代码
(3)info line
功能:查看某个line的相关信息。
格式:info line 函数名/*内存地址
说明:如果参数为函数名,则显示该函数在源文件中的行号及在内存中的起始地址和结束地址。例如:
info line main输出为:Line 36 of "bomb.c" starts at address 0x401050 <main> and ends at 0x40106b <main+27>.
如果参数为*内存地址,则显示该内存地址的指令对应的语句所在的函数在源文件中的行号及在内存中的起始地址和结束地址。例如:
info line *0x401053输出为:Line 36 of "bomb.c" starts at address 0x401050 <main> and ends at 0x40106b <main+27>.
(4)r 开始/重新执行 r means run
(5)b设置断点 b means break
格式:b *内存地址
delete:删除所有断点
delete num:删除编号为num的断点
info break:列出所有断点
(6)ni 单步步过,相当于debug命令中的p
(7)si 单步步入,相当于debug命令中的t
(8)finish 执行到返回
(9)display 显示某寄存器的值
格式:display /x $寄存器名字。例如:display /x $eax
(10)x查看内存单元
格式:x /nfu 内存地址 x means examine
说明:
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a按十六进制格式显示变量。
i 指令地址格式。
c 按字符格式显示变量。
s 按字符串格式显示变量。
f 按浮点数格式显示变量。
u表示一个地址单元的长度,其中:
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节。
(11)p查看变量值
格式: p 变量名
如果要查看变量的地址,用p &变量名