1.gdb调试命令
//使用gdb编译 -g -o $ gdb -g program.c(源码) -o program(可执行文件) //启动gdb调试 $ gdb program(可执行文件名) //运行 (gdb)start //程序运行,并停在第一行 (gdb)r //run,程序运行,遇到断点才停 (gdb)c //continue,继续运行 (gdb)n 或者 s //按照C语言行级别的单步调试,n(跟踪,不进入函数内部),s(步入,进入函数内部) (gdb)ni 或者si //按照汇编代码行级别的单步调试 //断点 (gdb)b 函数名 //下断点 ,其他用法:b *地址;b 行号;b *函数名,断点设置在函数的开头 (gdb)i b //查看断点, info break (gdb)d 断点编号 //删除断点 (gdb)clear 函数名/行号 //删除加在某个函数或某行的断点 (gdb)commands 断点编号 //断点后添加代码,达到自动化调试 > 代码 > end (gdb)disable 断点编号 //设置断点无效 (gdb)enable 断点编号 //设置断点生效 (gdb)b 行号 if 条件 //设置条件断点 //显示 (gdb)disas 函数名 //disassemble,查看函数的汇编指令 (gdb)info line //查看当前位置的源代码在内存中地址,info 后面还可以加其它的,用于查看相关信息 (gdb)x/从内存地址开始要显示内存单元的个数 内存地址 //显示内存 Ctrl+X+A //进入或退出图形化调试窗口,或者在运行时使用gdb -tui 可执行文件名 (gdb)layout regs //实时显示寄存器值和源码的变化,layout后面还可以+ src(仅显示源代码窗口)/asm(仅显示汇编代码窗口)/split(显示源代码和汇编代码窗口),layout next/prev(切换窗口) (gdb)win asm/src/split/regs +/- 行数 //调整窗口大小 (gdb)tui reg float/system/general //显示浮点寄存器/系统寄存器/通用寄存器 //查看当前代码 (gdb)l //list简写,从默认位置显示,显示当前行后面的源程序 (gdb)l 行号 //从指定行显示 (gdb)l 函数名 //从指定函数显示 (gdb)show list //显示list展示的行数 (gdb)set list 行数 //设置list展示的行数 //打印,变量 (gdb)p 变量名 //print,打印变量值 (gdb)ptype 变量名 //打印变量类型 (gdb)display 变量名 //跟踪查看一个变量,每次都停下来显示它的值 (gdb)i display //查看设置的自动变量操作 (gdb)undisplay 自动变量编号 //取消对先前设置的那些变量的跟踪 (gdb)set var 变量名 = 变量值 //设置变量 (gdb)finish //跳出函数体 (gdb)until //跳出循环
x命令详解:
//如以下命令表示:从内存地址0x46fd80开始显示20个内存单元,按照十六进制格式,并以8个字节作为一个内存单元 (gdb)x/20xg 0x46fd80
附录:介绍 · 100个gdb小技巧 · 看云 (kancloud.cn)
2.IDA调试命令
F9:运行(在调试器中启动一个新的进程或继续调试另一个进程) F2:设置断点 Ctrl+F2:终止调试进程 F4:执行到光标处 F7:单步步入(进入函数内部) Ctrl+F7:执行到从当前函数返回时 F8:单步跟踪(不进入函数内部) F5:查看伪代码 Tab:伪代码和汇编指令之间的切换 Ctrl+alt+S:打开堆栈记录窗口 Ctrl+alt+B:打开断点窗口 Esc:在反汇编窗口中,返回到上一步操作的位置 空格键:在反汇编窗口中,切换图形视图与列表视图 shift+F12:查看字符串 Alt+T:搜索字符串 Alt+B:搜索二进制序列 Ctrl+B:搜索下一个字符串/二进制序列 Alt+M:给某个地址设置标签 Ctrl+M:跳转到标签,通常配合Alt+M使用 Ctrl+W:保存IDA数据库 Ctrl+Shift+W:拍摄IDA快照 【;】:重复注释,会在所有引用到的地方都出现注释 【:】:普通注释 P:将数据转换为函数 C: 将数据转化为代码,无法识别栈帧 A:转换为字符串 D:转换为数据 U:转换为未定义数据 X:查看交叉引用 Y:修改类型 N:修改名称 G:转到指定地址 H:十进制和十六进制转换