由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. android art elf和Linux elf文件有什么区别?
- 3. .Kdb文件,.jks文件和CMS文件有什么区别?
- 4. io_submit和O_ASYNC文件有什么区别
- 5. .out和.log文件有什么区别
- 6. XIB和NIB文件有什么区别?
- 7. .sqlite和.db文件有什么区别?
- 8. .lib和.a文件有什么区别?
- 9. MDB和SDF文件有什么区别?
- 10. .class和.dex文件有什么区别?
- 11. * .bat和* .cmd文件有什么区别?
- 12. .htc和.js文件有什么区别?
- 13. apklib和jar文件有什么区别?
- 14. HDF5:“文件缓冲区”和“文件缓存”有什么区别?
- 15. vcvarsall.bat和bin/vcvars32.bat有什么区别?
- 16. .cfg文件和.xml文件有什么区别?
- 17. 有什么区别[pandas.read_csv(文件名)]和[pandas.DataFrame.from_csv(文件名)]
- 18. app.config文件和XYZ.settings文件有什么区别?
- 19. .po和.pot文件的文件内容有什么区别?
- 20. Express文件结构和Yeoman文件结构有什么区别?
- 21. mysql.log文件和mysqld.log文件有什么区别?
- 22. .o文件和.lib文件有什么区别?
- 23. 文件描述符和文件指针有什么区别?
- 24. .dll,.lib,.h文件有什么区别?
- 25. 这两个文件有什么区别?
- 26. 调试文件格式混淆:ELF/BIN
- 27. `eml`文件和RFC822电子邮件有什么区别?
- 28. 在linux中,#!/ bin/bash和#!/ bin/expect有什么区别?
- 29. 请让我知道cd bin和cd $ bin有什么区别?
- 30. char *文件名[1]或char *文件名有什么区别?
[这是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