执行指令
- s//单步步入 , 遇到调用跟进函数中 , 相当于step into , 源码层面的一步
si//常用 , 汇编层面的一步
- n//单步步过 , 遇到函数不跟进 , 相当于step over , 源码层面的一步
ni//常用 , 汇编层面的一步
c//continue , 常用 , 继续执行到断点 , 没断点就一直执行下去r//run , 常用 , 重新开始执行start// 类似于run, 停在main函数的开始
- b *(0x123456) //常用 , 给0x123456地址处的指令下断点
b *$ rebase(0x123456)//$rebase 在调试开PIE的程序的时候可以直接加上程序的随机地址
- b fun_name//常用 , 给函数fun_name下断点 , 目标文件要保留符号才行
b file_name:fun_name
- b file_name:15//给file_name的15行下断点 , 要有源码才行
b 15
b +0x10//在程序当前停住的位置下0x10的位置下断点 , 同样可以-0x10 , 就是前0x10
break fun if $rdi==5//条件断点 , rdi值为5的时候才断
info break(简写:i b) //查看断点编号delete 5//常用 , 删除5号断点 , 直接delete不接数字删除所有缩写: d 5disable 5//常用 , 禁用5号断点enable 5//启用5号断点clear//清除下面的所有断点
watch 0x123456//0x123456地址的数据改变的时候会断watch a//变量a改变的时候会断info watchpoints//查看watch断点信息
catch syscall//syscall系统调用的时候断住tcatch syscall//syscall系统调用的时候断住 , 只断一次info break//catch的断点可以通过i b查看
除syscall外还可以使用的有:1)throw: 抛出异常2)catch: 捕获异常3)exec: exec被调用4)fork: fork被调用5)vfork: vfork被调用6)load: 加载动态库7)load libname: 加载名为libname的动态库8)unload: 卸载动态库9)unload libname: 卸载名为libname的动态库10)syscall [args]: 调用系统调用 , args可以指定系统调用号 , 或者系统名称打印指令查看内存指令x:- x /nuf 0x123456//常用 , x指令的格式是:x空格/nfu , nfu代表三个参数
n代表显示几个单元(而不是显示几个字节 , 后面的u表示一个单元多少个字节) , 放在/后面u代表一个单元几个字节 , b(一个字节) , h(2字节) , w(四字节) , g(八字节)f代表显示数据的格式 , f和u的顺序可以互换 , 也可以只有一个或者不带n , 用的时候很灵活
x 按十六进制格式显示变量 。d 按十进制格式显示变量 。u 按十六进制格式显示无符号整型 。o 按八进制格式显示变量 。t 按二进制格式显示变量 。a 按十六进制格式显示变量 。c 按字符格式显示变量 。f 按浮点数格式显示变量 。s 按字符串显示 。b 按字符显示 。i 显示汇编指令 。