这些天我经常使用gdb的检查记忆功能。但是,我发现数据的二进制表示不是很可读,因为所有的位都是狭窄的。我想添加一些间距以使其更具可读性,例如,而不是01101100011011000110010101001000
我会0110-1100-0110-1100-0110-0101-0100-1000
或类似的东西。
x/4bt s
,但是仍然存在两个问题:数据以字节(8位而非4)分组,反向排列(因此其01001000 01100101 01101100 01101100
)< / p>
感谢
答案 0 :(得分:0)
你需要的东西类似于GDB的漂亮打印机,它们通常用于打印STL /链表等。可能有一些解决方案可以满足你的需求,所以谷歌有点适合漂亮的打印机。
下面的脚本只是一个如何使用python扩展编写自定义命令的示例,这将适用于GDB 7.3及更高版本,但是我测试了7.5版本。
import gdb
class ppbin(gdb.Command):
def __init__(self):
super(ppbin, self).__init__("ppbin", gdb.COMMAND_USER)
def invoke(self, arg, tty):
print arg
arg_list = gdb.string_to_argv(arg)
if len(arg_list) < 2:
print "usage: <address>, <byte-count>"
return
res = gdb.execute("x/%sxt %s" %(arg_list[1], arg_list[0]), False, True)
res = res.split("\t")
ii = 0
for bv in res:
if ii % 4:
print "%s-%s-%s-%s-%s-%s-%s-%s" %(bv[0:4], bv[4:8],
bv[8:12], bv[12:16], \
bv[16:20], bv[20:24], \
bv[24:28],bv[28:32])
ii += 1
ppbin()
调用新的ppbin命令
(gdb) source pp-bin.py
(gdb) ppbin 0x601040 10
0x601040 10
0000-0000-1010-1010-0011-0011-0101-0101
0000-0000-0000-0000-0000-0000-0000-0000
0000-0000-0000-0000-0000-0000-0000-0000
0000-0000-0000-0000-0000-0000-0000-0000
0000-0000-0000-0000-0000-0000-0000-0000
0000-0000-0000-0000-0000-0000-0000-0000
0000-0000-0000-0000-0000-0000-0000-0000
0000-0000-0000-0000-0000-0000-0000-0000
(gdb)
以上代码共享https://skamath@bitbucket.org/skamath/ppbin.git
P.S。 - 我通常发现十六进制调试内存(x命令)比二进制更容易,所以我不会使用我的解决方案。