2017-05-26 61 views
-1

我想覆盖共享库中定义的宏。C编程:重新定义共享库中定义的宏(.so)

例如:

libxyz.so(共享库)具有

#define ADDRESS 0 

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

现在我写的一个代码,其中,我想 “some_func()” 使用的地址是(比方说)0xabc36000 。

我可以在my.c文件中重新定义ADDRESS宏,以便它可以用作0xabc36000而不是some_func()中的0吗?

我知道宏在预处理阶段被替换,并且在稍后发生与共享库的链接。我想知道是否有办法做到这一点,不用修改共享库代码。

+8

你在最后一段回答你自己的问题。只是明确地重申:不,这是不可能的。 –

+3

共享库没有预处理器符号(只有源代码有它们)。所以你可以从源代码 –

+0

重新编译你的共享库你必须用新地址作为参数来覆盖包含对'func_use_addr()'的调用的整个函数'some_func()'。 – Ctx

回答

-4

是的,你可以重新定义一个宏。

#ifdef ADDRESS 
#undef ADDRESS 
#endif 

#define ADDRESS 0xabc36000 
+1

...但是,不会对已经预处理,编译和链接的共享对象执行任何操作。 – Quentin