0

ライブラリのクローンを作成して、memcpy や memmove などの 1 つの関数だけを変更し、デバッグ/探索目的でライブラリへの実行可能リンクを既に作成している場合、これを行う適切な方法は何ですか?

ライブラリ全体を変更して再コンパイルする必要があると思いますが、これを行う別の方法はありますか?
malloc フックのようなものがあることは理解していますが、これは malloc の特殊なケースのようです。誰かがリソースを持っている場合、valgrind と gdb が別のプログラム内からこれを行う方法の詳細に興味があります。

Mac と Linux のソリューションに興味があります。Linux では、以前に LD_LIBRARY_PATH を使用したことがあります。ライブラリ名を同じにする以外に必要なことはこれだけですか? Macでこれを行うにはどうすればよいですか?

なぜ私がこれをやりたいのか知りたい方のために説明すると、その目的は実験音楽のためです。メモリ操作を音声化するためにこれを行っているため、memcpy/memmove は通常どおり動作しますが、アクセスされたデータはサウンド カードにも送信されます。これを行うには他の方法があることは知っていますが (すでに他の方法をいくつか実行しています)、現在 memcpy/memmove に焦点を当てることに興味があるので、回答をこの焦点に限定していただければ幸いです。

4

1 に答える 1

1

を使用LD_LIBRARY_PATHして、通常とは異なる共有オブジェクト ライブラリをプログラムにロードさせることができます。ただし、ライブラリ全体ではなく 1 つ (またはいくつか) の関数だけを置き換えたい場合は、 を使用LD_PRELOADしてリンカー (ld.so) に特定の共有オブジェクトを早い段階でロードさせることができ、プログラムはシンボル (関数) を使用します。 )通常の場所でそれらを探すのではなく、そこに。

于 2011-04-17T01:17:24.400 に答える