ELF文件和bin文件有什么区别?

Man*_*jan 89 arm elf

编译器生成的最终图像包含bin文件和扩展加载器格式ELf文件,两者之间有什么区别,尤其是ELF文件的实用程序.

t0m*_*13b 85

Bin文件是纯二进制文件,没有内存修复或重定位,很可能它具有在特定内存地址加载的显式指令.然而....

ELF文件是可执行链接格式,它由符号查找和可重定位表组成,也就是说,它可以由内核加载到任何内存地址,并自动将所有使用的符号调整为该内存地址的偏移量.被装入.通常ELF文件有许多部分,例如'data','text','bss',仅举几例......它位于运行时可以计算调整符号内存引用位置的那些部分中在运行时动态.

  • 据我所知,bin 文件就像从偏移量 0 运行程序,数据段嵌入其中。如果这是错误的,请纠正我。 (2认同)
  • @t0mm13b 那么 .elf 文件可以像常规 .hex 文件一样被刻录到微控制器上,但它需要更多的闪存,并且每次重置微控制器时,这些部分的地址都会发生变化? (2认同)

old*_*mer 33

bin文件只是进入rom的位和字节,或者是运行程序的特定地址.您可以直接获取此数据并加载它,您需要知道基本地址是什么,因为通常不在那里.

elf文件包含bin信息,但它包含许多其他信息,可能的调试信息,符号,可以区分代码与二进制文件中的数据.允许多个二进制数据块(当您将其中一个转储到bin中时,您会获得一个带有填充数据的大bin文件,以将其填充到下一个块).告诉你你有多少二进制文件以及想要初始化为零的bss数据(gnu工具在正确创建bin文件时遇到问题).

精灵文件格式是标准,arm公布其标准的增强/变化.我建议每个人都写一个elf解析程序来理解其中的内容,不要打扰库,只需使用规范中的信息和结构就可以了.帮助克服gnu问题,一般创建.bin文件以及调试链接器脚本和其他有助于搞乱bin或elf输出的东西.


wen*_*jon 30

一些资源:

  1. 用于ARM体系结构的ELF
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. 来自wiki的ELF
    http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

ELF格式通常是编译的默认输出.如果使用GNU工具链,可以使用objcopy将其转换为二进制格式,例如:

  arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
Run Code Online (Sandbox Code Playgroud)

或者使用fromELF实用程序(内置在大多数IDE中,例如ADS):

 fromelf -bin -o [binary-output-file] [elf-input-file]
Run Code Online (Sandbox Code Playgroud)

  • 这是在回答了bin文件细节之后添加的,并且*添加了一个实用的技术.为此+1. (6认同)