C编程:重新定义共享库中定义的宏(.so)
问题描述:
我想覆盖共享库中定义的宏。C编程:重新定义共享库中定义的宏(.so)
例如:
libxyz.so(共享库)具有
#define ADDRESS 0
int some_func()
{
...
func_use_addr(ADDRESS);
}
现在我写的一个代码,其中,我想 “some_func()” 使用的地址是(比方说)0xabc36000 。
我可以在my.c文件中重新定义ADDRESS宏,以便它可以用作0xabc36000而不是some_func()
中的0吗?
我知道宏在预处理阶段被替换,并且在稍后发生与共享库的链接。我想知道是否有办法做到这一点,不用修改共享库代码。
答
是的,你可以重新定义一个宏。
#ifdef ADDRESS
#undef ADDRESS
#endif
#define ADDRESS 0xabc36000
+1
...但是,不会对已经预处理,编译和链接的共享对象执行任何操作。 – Quentin
你在最后一段回答你自己的问题。只是明确地重申:不,这是不可能的。 –
共享库没有预处理器符号(只有源代码有它们)。所以你可以从源代码 –
重新编译你的共享库你必须用新地址作为参数来覆盖包含对'func_use_addr()'的调用的整个函数'some_func()'。 – Ctx