2011-08-25 103 views
3

是否可以採用靜態對象並重命名符號,使其不會中斷函數調用?鏈接後更改符號名稱

例如,如果我們有一個包含兩個功能的靜態對象:

void A() 
{ 
    //Do stuff 
} 

void B() 
{ 
    A(); 
} 

假設這些外部聲明C函數則。所以將包含兩個符號 - 甲乙。有沒有辦法重命名A - > funcA和B - > funcB?

(涉及功能問題的第二部分調用相對於基於我天真到鏈接,如果你簡單地改變將函數調用打破名字沒有?)

附:平臺是linux,可能是用gcc編譯的,但是如果有交叉編譯器的話,我會很高興的!

+0

爲什麼你不能在編譯代碼之前將它們重命名爲你想要的? – karlphillip

+0

因爲現實生活中的情況並不像示例那樣乾淨利落 - 我想重新命名庫中的每個符號(以及我編碼的那些符號)。所以這將是很多搜索和替換的地獄。這種搜索和替換最終會混淆我不想要的代碼(但是我希望能夠以我自己的理由以奇怪的方式將它們連接起來)。 – VolatileStorm

回答

6

請參閱objcopy實用程序的手冊頁,特別是--redefine-syms選項。