0

function 内の次のステートメントfunc()では、malloc されたメモリ領域を指す変数名 (この例では「辞書」) を見つけようとしています。

Void func() {
   uint64_t *   dictionary = (uint64_t *) malloc ( sizeof(uint64_t) * 128 );
}

インストルメントmalloc()化されたものは、割り当ての開始アドレスとサイズを記録できます。ただし、割り当てられる変数「辞書」の知識はありません。コンパイラ側の機能は、コンパイラを変更してそのような割り当てステートメントをインストルメント化することなく、この問題を解決するのに役立ちますか?

私が考えている 1 つの方法は、変数 'dictionary' と関数 'malloc' が 1 つのソース コード行または隣り合っているという機能を使用することです。dwarf は行情報を提供します。

4

1 に答える 1

0

Clang と LLVM でできることの 1 つは、デバッグ情報を含むコードを出力してからmalloc呼び出しを探すことです。これらは LLVM 値に割り当てられ、デバッグ情報メタデータを介して元の C/C++ ソース コードにトレースできます (つまり、最適化を使用してコンパイルされていない場合)。

于 2013-11-28T22:47:49.907 に答える