2016-06-24 1 views
1

私はユーザー定義の構造体を持っています。アドレスを特定の型に変換するpython gdb

gdbでは、foo_tを指すアドレスがありますが、 たとえば、0xfe83ba56は、foo_t型のメモリ内の構造体を指します。

私はそのアドレスを型キャストによってfoo_tに変換できます。それで、必要ならば逆参照することができます。 (gdb)p(foo_t *)0xfe83ba56

gdbの中でpythonと同じようにどうですか?すでにfoo_t型のオブジェクトを指しているgdb.Valueオブジェクトがある場合は、そのアドレスを使用できます。ここでは、未処理のアドレスをgdb.Valueオブジェクトに変換しようとしています。

私はhttps://sourceware.org/gdb/onlinedocs/gdb/Values-From-Inferior.html#Values-From-Inferiorを探しましたが、SOの「類似の質問」セクションからの投稿はたくさんありましたが、正確な回答は見つかりませんでした。

+0

私はこの答えを自分自身を知らないが、それは私に発生したカスタムタイプのプリンタは、おそらく正確にこれを実行する必要があることなので、多分あなたは、カスタムを見て、それを把握することができますタイププリンタは、例えばlibstdC++? https://gcc.gnu.org/git/?p=gcc.git;a=tree;f=libstdc%2B%2B-v3/python – zwol

答えて

3

キャストするには、Value.castメソッドを使用します。ような何か:

t = gdb.lookup_type('foo_t').pointer() 
value = value.cast(t) 
+0

ありがとうございました。あなたの答えに追加するだけで、私は最初に生のアドレスをlong型のgdb.Valueに変換し、それを私が望む型にキャストしました。それは正常に働いた。 tv = gdb.Value(long(0xfffffe001ba43010,16)//それは64ビットのアドレスだった tf = tv.cast(gdb.lookup_type( 'foo_t')。pointer()) – DeeYen

関連する問題