0

最近はgdbのメモリ検査機能をよく使っています。ただし、すべてのビットが一緒に窮屈になっているため、データのバイナリ表現はあまり読みにくいと思います。読みやすくするためにスペースを追加したいので、たとえば、代わりに、または同様のものを使用し01101100011011000110010101001000ます。0110-1100-0110-1100-0110-0101-0100-1000

これは可能ですか?私が得た最も近いx/4bt sものは近いものでしたが、それでも2つの問題があります:データがバイト(4ではなく8ビット)にグループ化され、逆に配置されます(したがって01001000 01100101 01101100 01101100

ありがとう

4

1 に答える 1

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

PS-私は通常、16進数(xコマンド)でのデバッグメモリはバイナリよりも簡単であると感じているので、私のソリューションは使用しません。

于 2013-03-27T19:37:26.317 に答える