共有ライブラリで定義されているマクロをオーバーライドします。例えばCプログラミング:共有ライブラリ(.so)で定義されたマクロを再定義する
:
libxyz.so(共有ライブラリ)が
#define ADDRESS 0
int some_func()
{
...
func_use_addr(ADDRESS);
}
今、私は私が欲しいADDRESS "some_func()" を使用することがあるコード(例えば)0xabc36000の書き込みを持っています。
some_func()
の0xabc36000として使用されるように、my.cファイルでADDRESSマクロを再定義することはできますか?
マクロは前処理段階で置き換えられ、共有ライブラリとのリンクは後で行われることを理解します。私は共有ライブラリのコードを変更してこれを行う方法があるのだろうかと思います。
あなたは最後の段落であなた自身の質問に答えます。それをはっきりと再表明するだけです:いいえ、これは不可能です。 –
共有ライブラリにはプリプロセッサシンボルがありません(ソースコードのみがあります)。そこで、あなたの共有ライブラリをソースコード –
から再コンパイルすることができます。新しいアドレスをパラメータとして 'func_use_addr()'の呼び出しを含む 'some_func()'関数全体をオーバーライドする必要があります。 – Ctx