當我鏈接在一起對象文件,將得到的ELF可執行具有(僅)以下LOAD段:如何防止ld組合可寫和可執行部分?
LOAD off 0x00000000 vaddr 0x00008000 paddr 0x00008000 align 2**15 filesz 0x000010f0 memsz 0x000010f0 flags rwx
合併所有部分成一個rwx
段,而不是分離的可寫和可執行接頭ld
部分。我想阻止這一點。可重定位對象具有標記爲可寫或可執行的部分,因此此問題出現在鏈接時。
那麼,什麼決定了ld
如何爲段分配權限?鏈接器腳本似乎沒有任何相關的東西。工具鏈構建時是否指定了某些內容?
我針對的是ARM,工具鏈是arm-linux-gnueabi
,binutils
版本2.22。
編輯:鏈接器腳本是here。其他鏈接選項是-Bdynamic
,--gc-sections
,-z nocopyreloc
和--no-undefined
。
這似乎依賴於連接器。即使使用相同的鏈接器腳本,「arm-eabi」產生的段也是可分離的。我仍然不知道具體說明了什麼。 –
請發佈你的鏈接腳本你的問題的答案就在那裏,除非你用命令行覆蓋它,並且在這種情況下發布命令行,否則不能做很多沒有。非常可能且相當容易在鏈接描述文件中隨意分開... –
添加了腳本和選項 –