抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

pwndbg/gdb的使用

X的使用

x 是 examine 的缩写

n 表示要显示的内存单元的个数

u 表示一个地址单元的长度:

b 表示单字节
h 表示双字节
w 表示四字节
g 表示八字节
f 表示显示方式,可取如下值:

x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
i 指令地址格式
c 按字符格式显示变量
f 按浮点数格式显示变量
举例
x /20gx buf: 表示从内存地址 buf 读取内容,g 表示八字节,20 表示 20 个单位,x 按十六进制格式显示变量

x /3hu buf:表示从内存地址 buf 读取内容,h 表示以双字节为一个单位,3 表示三个单位,u 表示十进制格式显示无符号整型

P的使用

打印指令p(print):
p fun_name //打印fun_name的地址,需要保留符号
p 0x10-0x08 //计算0x10-0x08的结果
p &a //查看变量a的地址
p *(0x123456) //查看0x123456地址的值,注意和x指令的区别,x指令查看地址的值不用星号
p $rdi //显示rdi寄存器的值,注意和x的区别,这只是显示rdi的值,而不是rdi指向的值
p *($rdi) //显示rdi指向的值

cyclic

cyclic n :生成长度为n的字符串

cyclic -l aaaa #查找偏移(一般是返回地址

假如说我想找aaaj这个字符串的偏移,我们可以用

1
cyclic_find('aaaj')

其他

info all-registers 查看所有的寄存器的值

pwntools的使用

p32 p64

就是将一个数字转换为字符,例如

1
p32(0xdeadbeef)

就会转换为

1
'\xef\xbe\xad\xde'

这里顺序反了是因为linux编译的程序是小端序的

u32 u64

就是将字符转换为数字,

评论