2011-08-25 109 views
3

是否可以采用静态对象并重命名符号,使其不会中断函数调用?链接后更改符号名称

例如,如果我们有一个包含两个功能的静态对象:

void A() 
{ 
    //Do stuff 
} 

void B() 
{ 
    A(); 
} 

假设这些外部声明C函数则。所以将包含两个符号 - 甲乙。有没有办法重命名A - > funcA和B - > funcB?

(涉及功能问题的第二部分调用相对于基于我天真到链接,如果你简单地改变将函数调用打破名字没有?)

附:平台是linux,可能是用gcc编译的,但是如果有交叉编译器的话,我会很高兴的!

+0

为什么你不能在编译代码之前将它们重命名为你想要的? – karlphillip

+0

因为现实生活中的情况并不像示例那样干净利落 - 我想重新命名库中的每个符号(以及我编码的那些符号)。所以这将是很多搜索和替换的地狱。这种搜索和替换最终会混淆我不想要的代码(但是我希望能够以我自己的理由以奇怪的方式将它们连接起来)。 – VolatileStorm

回答

6

请参阅objcopy实用程序的手册页,特别是--redefine-syms选项。