2017-02-19 44 views
0

我已經使用objcopy -o binary創建了一個從精靈文件創建的原始二進制文件。是否有可能通過給定的偏移量重新定位它?我相信我正在搜索的效果與使用- 更改地址選項類似,然後將其轉換爲二進制。是否可以重新定位二進制文​​件?

預先感謝您

回答

0

man obdjdump

objcopy把可以通過使用的輸出目標被用來生成一個原始的二進制文件的二進制(例如,使用-O二進制)。當objcopy生成一個原始的二進制文件時,它本質上會產生輸入目標文件內容的內存轉儲。 所有符號和重定位信息將被丟棄。內存轉儲將從複製到輸出文件的最低部分的加載地址開始。

(由我強調)

所以,除非你導出一個獲得在不同的地方加載多個部分,然後轉移你推到二進制的單節沒有任何影響。

+0

我不知道我是否明白你的意思。該代碼旨在在嵌入式環境中,在真實的物理地址空間中運行。所以實際上移動單個部分很重要。該二進制文件必須準備好在它將被加載的特定位置運行。 – joseCM

+0

但這不是'-O二進制'產生的二進制類型; 「內存轉儲將從最低部分的加載地址開始」。所以如果你只有一個部分,不管從哪裏開始,它的開始始終是二進制轉儲的開始。 –

+0

當然是的。但是在鏈接器腳本中,實際的VMA地址被指定爲感興趣的地址範圍。例如,如果它是位於地址X的全局變量,則代碼將引用該地址。我想更改二進制文件,以便引用變量(現在將在X + OFFSET處)的代碼被更改爲引用正確的地址。 – joseCM

相關問題