1

C/C++ プログラムのメモリ管理に役立つツール (Linux 用) の実装を依頼されました。主な目的はメモリ リークを追跡することですが、特に memcpy への重複する引数をチェックしています。

私は実際にこれらの関数へのすべての呼び出しをインターセプトするために自分のバージョンが必要なので (たとえば、他のライブラリから)、実際にそれらをオーバーライドする必要があります。したがって、すべての投稿で提案されている #define トリックは使用できません。私の質問は、元のソース ファイル名、呼び出しが行われた関数、および行番号を見つける方法です。

これまでの私の唯一のアイデアは、デバッグ情報を使用してプログラムをコンパイルし、オブジェクト ファイル (Linux を使用しているため ELF ) を掘り下げることです。私はオブジェクト ファイルで遊んだことがなく、アセンブリ言語の基本しか知らないので、これはかなり大変な作業のようです。

これを達成するための他の簡単な方法はありますか?似たようなことに取り組んだことがある人が、私がそれを始めるのを手伝ってくれるとしたら:)?.

ありがとうございました

4

1 に答える 1

2

Linux を使用しているため、glibc のmalloc フック サポートを使用できます。実際の例もそのページに記載されています。

于 2011-02-07T17:48:56.210 に答える