由complier生成的最終圖像包含bin文件和擴展加載程序格式ELf文件,兩者之間有什麼區別,特別是ELF文件的實用性。ELF文件和bin文件有什麼區別?
71
A
回答
71
Bin文件是一個純粹的二進制文件,沒有內存修改或重定位,很可能它有明確的指令要加載到特定的內存地址。鑑於......
ELF文件是可執行的可鏈接格式,它由符號查找和可重定位表組成,也就是說,它可以由內核加載到任何內存地址,並自動調整所有使用的符號到從它加載到的內存地址的偏移量。通常,ELF文件有很多部分,比如'data','text','bss'等等,它們在運行時可以計算出哪裏調整符號的內存引用的地方動態運行時。
21
一些資源:
- ELF針對ARM架構
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf - ELF從維基
http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
ELF格式通常是編譯的默認輸出。
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
或使用fromELF實用程序(建於大多數IDE如ADS雖然): 如果你使用GNU工具鏈,可以將它通過使用objcopy命令,如轉換爲二進制格式
fromelf -bin -o [binary-output-file] [elf-input-file]
26
bin文件只是進入ROM的位和字節,或者將運行程序的特定地址。你可以直接獲取這些數據並直接加載它,你需要知道基地址是什麼,因爲通常不在那裏。
一個elf文件包含bin信息,但它被許多其他信息包圍,可能的調試信息,符號可以區分二進制數據中的代碼和數據。允許多個二進制數據塊(當你將其中的一個轉儲到一個bin中時,你會得到一個帶有填充數據的大bin文件將它填充到下一個塊)。告訴你你有多少二進制文件,以及有多少bss數據需要初始化爲零(gnu工具在正確創建bin文件時有問題)。
elf文件格式是一種標準,arm發佈其標準的增強/變體。我建議每個人都寫一個elf解析程序來理解它裏面的內容,不要去打擾一個庫,只是使用規範中的信息和結構非常簡單。幫助克服gnu問題,一般創建.bin文件,以及調試鏈接器腳本和其他可以幫助搞亂bin或elf輸出的東西。
相關問題
- 1. .bin和.dat文件有什麼區別?
- 2. Linux ARM ELF和iOS ARM ELF文件有什麼區別?
- 3. android art elf和Linux elf文件有什麼區別?
- 4. .Kdb文件,.jks文件和CMS文件有什麼區別?
- 5. .so和.lo文件有什麼區別?
- 6. io_submit和O_ASYNC文件有什麼區別
- 7. .sqlite和.db文件有什麼區別?
- 8. apklib和jar文件有什麼區別?
- 9. XIB和NIB文件有什麼區別?
- 10. NSUserDefaults和.plist文件有什麼區別
- 11. .class和.dex文件有什麼區別?
- 12. cmd文件中%和%%有什麼區別?
- 13. .proto和.prototxt文件有什麼區別
- 14. 流和文件有什麼區別?
- 15. .htc和.js文件有什麼區別?
- 16. .out和.log文件有什麼區別
- 17. .so和.a文件有什麼區別?
- 18. MDB和SDF文件有什麼區別?
- 19. * .bat和* .cmd文件有什麼區別?
- 20. .lib和.a文件有什麼區別?
- 21. HDF5:「文件緩衝區」和「文件緩存」有什麼區別?
- 22. vcvarsall.bat和bin/vcvars32.bat有什麼區別?
- 23. 訪問文件和打開文件有什麼區別
- 24. 清單文件和xml文件之間有什麼區別android
- 25. 有什麼區別[pandas.read_csv(文件名)]和[pandas.DataFrame.from_csv(文件名)]
- 26. app.config文件和XYZ.settings文件有什麼區別?
- 27. .po和.pot文件的文件內容有什麼區別?
- 28. www文件夾和htdocs文件夾有什麼區別?
- 29. git reset文件和git checkout文件有什麼區別?
- 30. 源文件夾和(普通)文件夾有什麼區別
[這是NASM必須說的](http://www.nasm.us/doc/nasmdoc7.html#section-7.1)。不是ARM特定的,但可能是相同的概念。例如,如果你編譯的文件只包含沒有'-f'(或'-fbin')的'NOP',它就會編譯成單個字節'0x90',而不是帶有'-felf32'的400字節ELF容器。所以只需要原始代碼,不需要容器元數據。 NASM稱它主要用於MS-DOS .COM和[.SYS](https://en.wikipedia.org/wiki/.sys)文件。 'section'指令大多被忽略,只會產生對齊。 – 2015-04-29 09:54:31
這是bin文件有用的一種方式:使引導扇區部署操作系統:http:// stackoverflow。com/a/32483545/895245 – 2015-09-17 17:57:14