在stackoverflow和其他地方已經有很多帖子詳細說明如何將二進制blob嵌入到精靈二進制文件中。用objcopy將二進制嵌入到elf中可能會導致對齊問題?
Embedding binary blobs using gcc mingw
和
C/C++ with GCC: Statically add resource files to executable/library
是最完整的答案。
但是沒有人提到可能存在的問題。這裏有一個quicky foo.txt的coverted到foo.o的:
$ objdump -x foo.o
foo.o: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 0000000d 00000000 00000000 00000034 2**0
CONTENTS, ALLOC, LOAD, DATA
SYMBOL TABLE:
00000000 l d .data 00000000 .data
0000000d g .data 00000000 _binary_foo_txt_end
0000000d g *ABS* 00000000 _binary_foo_txt_size
00000000 g .data 00000000 _binary_foo_txt_start
現在,我真的不神交這一切的輸出 - 是有相關文件證明這個東西???我想大部分是明顯的「g」是全球性的,「l」是本地等等等等......
什麼引人注目的是.data段設置爲0.這是否意味着我認爲它手段?即:當談到鏈接,鏈接器會走「啊是啊,無論何地...」
如果你嵌入char數據或工作在x86上,那麼你永遠不會注意到。但是,如果你嵌入int數據或者像我一樣在ARM上嵌入16位和32位數據,那麼你可以在任何時候獲得對齊陷阱。
我的直覺是,這意味着或者objcopy需要另一個選項來指定二進制blob的對齊方式,或者它已損壞,您根本不應該使用此方法。
這對我有用。 – 2013-03-16 00:16:08