必要なのは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コマンド)でのデバッグメモリはバイナリよりも簡単であると感じているので、私のソリューションは使用しません。