1

1つのコアダンプ(主にgdbを使用)をデバッグしようとしていますが、これまでにわかったのは、正確に124バイトの構造があり、問題が発生していることだけです。このプログラムのすべてのソースを考えると、その構造を見つける方法はありますか?(つまり、サイズが124バイトの構造を見つける方法があります)

  • PS。私はこの構造の記憶の正確な場所を知っていますが、それを見てもその目的についての手がかりはありません。これも一般的な構造なので、コアダンプをいくつでも作成できます。

  • PS2。これまでに試しました:

    1. 正規表現を使用する には、見つかった各行grep '^ *[a-zA-Z][^ ;,."()]* [a-zA-Z][^ ;,."()]*' * | grep -v 'return' | sed 's/[^:]*: *\([^ ]*\).*/\1/' | sort | uniq > tmp.txtに追加してgdbに入力します。p sizeof(x)
    2. gdbで使用するinfo variablesには、出力をログに記録し、変数タイプを抽出し、各タイプにsizeof(x)を追加して、gdbに出力します。
4

2 に答える 2

2

これを使用してみてください:

objdump -W <elf-name> | grep -B 2 "DW_AT_byte_size   : 124"

このコマンドは、ELFファイル内のすべてのデバッグシンボルをダンプし、それらのサイズが124であることを確認します。

于 2012-07-16T09:47:57.630 に答える
2

すべてのソースファイルに含まれているヘッダーファイルで、マクロを定義し、

#define malloc(size) my_malloc(size, __FILE__, __LINE__)

そして、実装では:

#undef malloc
void * my_malloc(size_t size, const char* file, int line)
{
    //if the size equal to 124 bytes, log it, then you will have a chance know where this kind of allocation happens, so you know the struct.
    if(124==size) printf(...);

    return malloc(size);
}
于 2012-07-16T10:03:52.770 に答える