GDBの逆アセンブルコマンドで表示される、マングルされたC ++識別子を切り捨てるにはどうすればよいですか?
-
08-07-2019 - |
質問
GDBの逆アセンブルコマンドは、短いC識別子に適しています。 メイン。長い、マングルされたC ++識別子の場合、冗長性は過剰です。たとえば、icpcを使用すると、次のような結果が表示されます
(gdb) disassemble 0x49de2f 0x49de5b
Dump of assembler code from 0x49de2f to 0x49de5b:
0x000000000049de2f <_ZN5pecos8suzerain16fftw_multi_array6detail18c2c_buffer_processIPA2_dPKSt7complexIdEilNS2_26complex_copy_differentiateIS4_EEEEvT_T1_T2_T0_SD_SE_RKT3_+167>: mov 0x18(%rsp),%rsi
CLIで長時間表示されるのは面倒です。これにより、GDBのTUIアセンブリはほとんど役に立たなくなります。
切り捨てられた識別子を表示するようにGDBに指示する方法はありますか? 50文字以外のすべてをクリップしますか?
解決
CVSの現在のGDBは、逆アセンブリに関数が1つしかないことを認識している場合、希望どおりに動作します。
(gdb) disas 0x000000000040071c
Dump of assembler code for function _ZNKSt8_Rb_treeIPiSt4pairIKS0_S0_ESt10_Select1stIS3_ESt4lessIS0_ESaIS3_EE21_M_get_Node_allocatorEv:
0x000000000040071c <+0>: push %rbp
0x000000000040071d <+1>: mov %rsp,%rbp
0x0000000000400720 <+4>: mov %rdi,-0x8(%rbp)
0x0000000000400724 <+8>: mov -0x8(%rbp),%rax
0x0000000000400728 <+12>: leaveq
0x0000000000400729 <+13>: retq
End of assembler dump.
GDBは、逆アセンブリが関数の境界を越えるかどうかを判断できない場合でも、「long」を出力します。フォーム:
(gdb) disas 0x000000000040071c 0x000000000040071c+1
Dump of assembler code from 0x40071c to 0x40071d:
0x000000000040071c <_ZNKSt8_Rb_treeIPiSt4pairIKS0_S0_ESt10_Select1stIS3_ESt4lessIS0_ESaIS3_EE21_M_get_Node_allocatorEv+0>: push %rbp
End of assembler dump.
これは、&quot;を導入したパッチです。短い形式&quot;。
他のヒント
これはあなたの質問に実際に答えるわけではありませんが、少なくとも物事を解体して少しthemいようにすることができるかもしれません:
印刷asm-demangleを設定
所属していません StackOverflow