t0m*_*13b 85
Bin文件是纯二进制文件,没有内存修复或重定位,很可能它具有在特定内存地址加载的显式指令.然而....
ELF文件是可执行链接格式,它由符号查找和可重定位表组成,也就是说,它可以由内核加载到任何内存地址,并自动将所有使用的符号调整为该内存地址的偏移量.被装入.通常ELF文件有许多部分,例如'data','text','bss',仅举几例......它位于运行时可以计算调整符号内存引用位置的那些部分中在运行时动态.
old*_*mer 33
bin文件只是进入rom的位和字节,或者是运行程序的特定地址.您可以直接获取此数据并加载它,您需要知道基本地址是什么,因为通常不在那里.
elf文件包含bin信息,但它包含许多其他信息,可能的调试信息,符号,可以区分代码与二进制文件中的数据.允许多个二进制数据块(当您将其中一个转储到bin中时,您会获得一个带有填充数据的大bin文件,以将其填充到下一个块).告诉你你有多少二进制文件以及想要初始化为零的bss数据(gnu工具在正确创建bin文件时遇到问题).
精灵文件格式是标准,arm公布其标准的增强/变化.我建议每个人都写一个elf解析程序来理解其中的内容,不要打扰库,只需使用规范中的信息和结构就可以了.帮助克服gnu问题,一般创建.bin文件以及调试链接器脚本和其他有助于搞乱bin或elf输出的东西.
wen*_*jon 30
一些资源:
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)