文章插图
而当我们单步执行,执行完
puts
函数后,在此查看该地址所存储的内容,可以看到该地址存储的内容已经发生了改变文章插图
具体的流程可以看下面这张图片,对于符号去
got
表中找它的真实地址,如果不存在就触发链接器/加载器去更新函数的真实地址文章插图
文章插图
在此查看
0xf7e3cc30
处存储的内容 , 其实就是glibc
这个运行库中的puts
函数的真实地址文章插图
pwndbg基本操作基本指令
help
//帮助- i//info,查看一些信息,只输入info可以看可以接什么参数,下面几个比较常用
i b
//常用,info break 查看所有断点信息(编号、断点位置)i r
//常用,info registers 查看各个寄存器当前的值i f
//info function 查看所有函数名,需保留符号
- show//和info类似,但是查看调试器的基本信息,如:
show args
//查看参数
rdi
//常用,+寄存器名代表一个寄存器内的值,用在地址上直接相当与一个十六进制变量backtrace
//查看调用栈q
//quit 退出,常用vmmap
//内存分配情况
- 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,用的时候很灵活推荐阅读
- 四十一 增删查改分页 Java开发学习----MyBatisPlus标准数据层开发
- 中 学习ASP.NET Core Blazor编程系列十——路由
- CC1,3,6回顾
- 图学习【参考资料2】-知识补充与node2vec代码注解
- 二十四 设计模式学习:Spring 中使用到的设计模式
- Java安全之CC3
- TensorFlow深度学习!构建神经网络预测股票价格!?
- JUC学习笔记——共享模型之管程
- Seata Server 1.5.2 源码学习
- 2022极端高温!机器学习如何预测森林火灾?? 万物AI