2017-05-26 7 views
-1

共有ライブラリで定義されているマクロをオーバーライドします。例えばCプログラミング:共有ライブラリ(.so)で定義されたマクロを再定義する

libxyz.so(共有ライブラリ)が

#define ADDRESS 0 

int some_func() 
{ 
    ... 
    func_use_addr(ADDRESS); 
} 

今、私は私が欲しいADDRESS "some_func()" を使用することがあるコード(例えば)0xabc36000の書き込みを持っています。

some_func()の0xabc36000として使用されるように、my.cファイルでADDRESSマクロを再定義することはできますか?

マクロは前処理段階で置き換えられ、共有ライブラリとのリンクは後で行われることを理解します。私は共有ライブラリのコードを変更してこれを行う方法があるのだろうかと思います。

+8

あなたは最後の段落であなた自身の質問に答えます。それをはっきりと再表明するだけです:いいえ、これは不可能です。 –

+3

共有ライブラリにはプリプロセッサシンボルがありません(ソースコードのみがあります)。そこで、あなたの共有ライブラリをソースコード –

+0

から再コンパイルすることができます。新しいアドレスをパラメータとして 'func_use_addr()'の呼び出しを含む 'some_func()'関数全体をオーバーライドする必要があります。 – Ctx

答えて

-4

はい、マクロを再定義できます。

#ifdef ADDRESS 
#undef ADDRESS 
#endif 

#define ADDRESS 0xabc36000 
+1

...いいえ、すでにプリプロセス、コンパイル、リンクされている共有オブジェクトに対しては何も行いません。 – Quentin

関連する問題