首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >格式化gdb中数据的二进制表示形式

格式化gdb中数据的二进制表示形式
EN

Stack Overflow用户
提问于 2013-03-27 16:49:50
回答 1查看 148关注 0票数 0

最近,我经常使用gdb的检查内存特性。然而,我发现数据的二进制表示不是很好读,因为所有的位都挤在一起。我想添加一些空格以使其更具可读性,例如,我将使用0110-1100-0110-1100-0110-0101-0100-1000或类似的东西来代替01101100011011000110010101001000

这个是可能的吗?我得到的最接近的是x/4bt s,它很接近,但仍然有两个问题:数据是按字节(8位而不是4位)分组的,这些字节是反向布局的(所以它的01001000 01100101 01101100 01101100)。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-28 03:37:26

你需要的是一些类似于漂亮打印机的GDB,它们通常用于打印STL /链表等。可能有一些解决方案可以满足你的需要,所以谷歌有点漂亮的打印机。

下面的脚本只是一个示例,说明如何使用python扩展编写自定义命令,这适用于GDB 7.3版和更高版本,但我在7.5版中测试了它。

代码语言:javascript
运行
复制
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命令

代码语言:javascript
运行
复制
(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

附言:我通常发现在十六进制(x命令)中调试内存比二进制更容易,所以我不会使用我的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15654823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档