真的有兩個問題圍繞使用--add部分。簡單的就是標題。根據我的閱讀,我一直無法弄清楚如何執行--add-section。如何使用OBJCOPY的--add-section開關?
要使用添加部分,我必須傳遞部分名稱。如果我使用現有的部分名稱,程序將以「無法添加部分'.data':格式錯誤的文件作爲響應。」也許我只需要傳遞另一個參數。如果我使用新的部分名稱,我寧願這樣做,但我會收到警告:「分配的部分」.blob「不在分段中。」
現在,我已經獲得了我的功能,因爲我需要它來處理「不在段」警告。我想知道是否有合法的方法將此Blob放入可執行文件中。我會鏈接它,但這並不容易,因爲我要添加的數據是從可執行文件本身的內容生成的。
第二個問題真的是我關心的。考慮到在鏈接完成之後無法計算blob,是否有辦法執行以下操作:
- 鏈接ELF文件
- 生成ELF文件和其他數據
添加的blob ELF文件的blob,使其在運行時加載到正確的位置在內存
objcopy --add-section .blob=blob.o \ --set-section-flags .blob=alloc,contents,load,readonly \ --change-section-address .blob=ADDRESS \ program.elf program.blobbed.elf
我很樂意在ELF文件中添加一個節和/或段作爲鏈接的一部分,並在其中插入此blob。我不知道該怎麼做。
我已經想到我可以通過第二個鏈接完成這個壯舉,但objcopy會更乾淨。
- 鏈接ELF文件
- 生成ELF文件和其他數據
- 重新鏈接ELF文件的blob包括新blob.o
UPDATE:這最後一個策略可能是可行的只要重鏈接不會改變由第一個鏈接產生的程序部分中的某些內容。它並不是第一次嘗試,但它可能可以解決它。因此,希望使用--add-section來添加這個blob,而不是通過第二個鏈接。
我考慮過這種方法,因爲我確實知道塊的大小。但是,這個佔位符blob的存在會改變第一個鏈接的結果,我依賴於這種情況不會發生。 blob的要點是將完整性檢查數據附加到轉儲二進制文件的末尾。虛擬blob的存在使得棘手,但不是不可能的。我正在尋找更清潔的方法。 – user2600958
@ user2600958你最終的解決方案是什麼? –