要了解如何以pf您想要的方式使用,我们应该一步一步地进行检查。
我为一个radare2游乐场打开了一个空白的记忆:
$ r2 malloc://200
[0x00000000]>
接下来,受您示例的启发,我在此操场上写了日期:
[0x00000000]> wx AABBCCDD @ 0
[0x00000000]> w ccccccccccccccc @ 4
[0x00000000]> wx 11223344 @ 19
基本上,我写了 4 个字节,然后是 15 个字符,然后是其他 4 个字节。这是它在内存中的样子:
[0x00000000]> px 32
- offset - 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 aabb ccdd 6363 6363 6363 6363 6363 6363 ....cccccccccccc
0x00000010 6363 6311 2233 4400 0000 0000 0000 0000 ccc."3D.........
为了打印这个结构,我做了这样的事情:
[0x00000000]> pf x[15]zx
0x00000000 = 0xddccbbaa
0x00000004 = ccccccccccccccc
0x00000013 = 0x44332211
如您所知,pf用于打印格式化数据。通过使用pf??和,pf???您可以查看示例并理解我的命令的每个部分。
如果要打印整数,可以使用i代替x。
[0x00000000]> pf i[15]zi 1st 2nd third
1st : 0x00000000 = -573785174
2nd : 0x00000004 = ccccccccccccccc
third : 0x00000013 = 1144201745
我的结构由4部分组成:
pf 命令
x在哪里x用于打印十六进制值(4 个字节)
[15]z 打印字符串的 15 个字符
x 打印另一个十六进制值
您还可以命名字段:
[0x00000000]> pf x[15]zx 1st 2nd third
1st : 0x00000000 = 0xddccbbaa
2nd : 0x00000004 = ccccccccccccccc
third : 0x00000013 = 0x44332211
您可以使用其他格式字符,例如e交换字节序等