2013-11-01 33 views
0

將二進制文件嵌入到帶有gcc的精靈圖像中時,是否有辦法改變自動生成的_binary_*_size符號的地址?與_binary_*_start_binary_*_end符號不同,_binary_*_size符號似乎不遵循代碼的基地址。他們在一個bfd絕對部分(*ABS*)。如何重新定位bfd尺寸符號?

例如:

$ arm-linux-gnueabihf-gcc -nostdlib -Wl,-Ttext=0x80000000,--format=binary,foo.bin,--format=default boot.S 
$ arm-linux-gnueabihf-nm a.out | sort 
00000010 A _binary_foo_bin_size 
80000000 T _start 
80008004 D _binary_foo_bin_start 
80008014 D _binary_foo_bin_end 
80008014 A __bss_start 
80008014 A __bss_start__ 
80008014 A __bss_end__ 
80008014 A _bss_end__ 
80008014 A _edata 
80008014 A _end 
80008014 A __end__ 

我想_binary_foo_bin_size是在0x80008***而不是0x00000***。 (最好不寫我自己的鏈接腳本或使用額外的objcopy命令。)

回答

0

我認爲_size符號記錄節的大小。所以,抵消這個符號將是錯誤的 - 它不會再記錄大小。

我很好奇你爲什麼需要這樣做。你沒有說。也許還有其他方法可以實現你的目標。

+0

我需要擺脫_size符號,因爲當我在我的電路板上加載ELF時,調試器正試圖在地址0x00000010上寫入_size數據,這是引導ROM在我的主板上。 – Dominic

+0

它是什麼調試器? –

+0

另外我很驚訝有任何數據要寫。我想我會開始更直接地嘗試刪除符號。 –