2010-08-13 74 views
18

我想用與Binutils的objcopy --redefine-syms工具Mac相同的東西來重命名對象文件(.o)中的符號。我發現沒有arm-apple-darwin10-objcopy。我嘗試了MacPorts的arm-elf-binutils端口,並試圖與otoolsegedit玩點兒沒有太大的成功。Mac/iPhone的objcopy等價物?

有什麼想法嗎?

+0

您可以定義別名,這意味着舊的符號仍然存在? – 2011-03-28 15:28:55

+0

'brew install binutils'和'gobjcopy'怎麼樣?例如:'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o';注意:由此產生的可執行文件似乎是錯誤的,但是'nm main2.o | grep _foobar'從常見問題解答中工作 – timotheecour 2018-01-25 23:02:04

回答

3

聽起來像是昂納霧的objconv

objconv announcement

現在我已經完成製作在我 先前的文章中提到的目標 文件轉換器的Mach-O文件的完整 支持工作。您可以將其用作替代丟失的objcopy 實用程序的 。

Objconv可用於以下用途 :將所有的x86 和x86-64平臺的Mach-O, ELF,COFF和OMF格式之間的目標文件和庫 /歸檔文件。在目標文件中更改符號 名稱,使符號 變弱,爲符號添加別名。
建立,修改和轉換靜態 庫文件(*。A,* .LIB)跨平臺 (蘋果機,Linux,BSD,Windows)中
轉儲對象文件和可執行文件 拆卸目標文件和 可執行文件。很好的 反彙編器。可從www.agner.org/optimize/下載 。源代碼可在GPL下獲得。 讓我知道你是否想測試它。玩的開心!

objconv manual

objconv.zip - source

+0

:「11.3是否有可能將文件轉換爲ARM? 不是。很多人都問過這個問題,所以顯然需要這樣一個工具,但我不會使用這種工具它只支持x86和x86-64體系結構的文件, 需要重寫objconv才能爲ARM文件創建一個轉換器。 – 2013-07-25 18:41:29

1

objconv目前沒有工作的ARM,所以這個選項不適用於iPhone。儘管如此,使用elf的objconv對mac osx x86/x64使用mach-o應該沒問題。讓我知道如果你找到了ARM

2

我知道我復活這個職位從死裏復活的解決方案,但是...

我有一個突然需要做到這一點爲好,並發現,objcopy沒有按在OSX上工作有點令人震驚。但我認爲可能使用ld來達到同樣的效果:

ld -r input.o -o output.o -alias oldsymbol newsymbol -unexported_symbol oldsymbol 

這真的只是創造了一個新的名稱符號的別名,隱藏了舊的。

我還沒有機會做很多測試,但看着輸出文件nm顯示它似乎做的是正確的事情。

+0

該命令刪除所有調試符號。你知道如何從原始對象文件中複製它們嗎? – Dmitry 2013-07-23 12:11:21

+1

'objcopy'可以重命名符號T(文本部分符號)和U(未定義)符號。但是,你的'ld'解決方案只能處理前者。 – 2014-02-27 00:11:57