bin、hex、elf、axf文件的认识

笔者对嵌入的几种文件进行简单介绍。

1. bin文件

bin文件是比较简单的文件,没什么格式,就是一个二进制文件(软件会显示用十六进制显示,方便阅读)。用户可以按照自己的方式写入,然后再自己读取并解析数据。可以看到下载bin文件时,需要指定下载地址。而hex文件则不需要。

比如一个bin的数据文件,下载到芯片中(比如通过链接脚本指定代码段),然后芯片运行的时候,在指定地址按照自定义方式去取数据并解析。比如下面这个帧格式的数据,按照既定方式解析即可(超过一个字节的数据,基本都是小端模式)。


2. hex文件

hex文件格式认识

3. axf文件

axf是arm excutable file (ARM可执行文件)的缩写,由ARM编译器产生,还附加调试信息等,主要由以下几个段:

头部信息、向量表(中断 跳转)、Boot(bootload代码)、Code((text + RO))、DATA(代码段 RW +ZI(bss段))、Stack、Heap、Debug(调试段)和Symbol(symbol 符号)

通过readelf指令可以解析axf文件,看到里面的各个段信息,readelf 指令如下:

Usage: readelf <option(s)> elf-file(s)
 Display information about the contents of ELF format files
 Options are:
  -a --all               Equivalent to: -h -l -S -s -r -d -V -A -I
  -h --file-header       Display the ELF file header
  -l --program-headers   Display the program headers
     --segments          An alias for --program-headers
  -S --section-headers   Display the sections' header
     --sections          An alias for --section-headers
  -g --section-groups    Display the section groups
  -t --section-details   Display the section details
  -e --headers           Equivalent to: -h -l -S
  -s --syms              Display the symbol table
     --symbols           An alias for --syms
  --dyn-syms             Display the dynamic symbol table
  -n --notes             Display the core notes (if present)
  -r --relocs            Display the relocations (if present)
  -u --unwind            Display the unwind info (if present)
  -d --dynamic           Display the dynamic section (if present)
  -V --version-info      Display the version sections (if present)
  -A --arch-specific     Display architecture specific information (if any)
  -c --archive-index     Display the symbol/file index in an archive
  -D --use-dynamic       Use the dynamic section info when displaying symbols
  -x --hex-dump=<number|name>
                         Dump the contents of section <number|name> as bytes
  -p --string-dump=<number|name>
                         Dump the contents of section <number|name> as strings
  -R --relocated-dump=<number|name>
                         Dump the contents of section <number|name> as relocated bytes
  -z --decompress        Decompress section before dumping it
  -w[lLiaprmfFsoRtUuTgAckK] or
  --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
               =frames-interp,=str,=loc,=Ranges,=pubtypes,
               =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
               =addr,=cu_index,=links,=follow-links]
                         Display the contents of DWARF debug sections
  --dwarf-depth=N        Do not display DIEs at depth N or greater
  --dwarf-start=N        Display DIEs starting with N, at the same depth
                         or deeper
  --ctf=<number|name>    Display CTF info from section <number|name>
  --ctf-parent=<number|name>
                         Use section <number|name> as the CTF parent

  --ctf-symbols=<number|name>
                         Use section <number|name> as the CTF external symtab

  --ctf-strings=<number|name>
                         Use section <number|name> as the CTF external strtab

  -I --histogram         Display histogram of bucket list lengths
  -W --wide              Allow output width to exceed 80 characters
  @<file>                Read options from <file>
  -H --help              Display this information
  -v --version           Display the version number of readelf

Header信息。

  • DATA:数据是二进制补码,
  • Type:EXEC,可执行文件
  • Machine:AArch64,ARM64位架构,
  • Entry point address:起始地址,0x80000000
  • size of this header,头部信息大小,64Byte
  • Number of section header:40个section。

Section段信息。

可以看到有40个section,还有调试信息,debug段,这些section一般是通过链接脚本里面指定的,同时也会有size和align对齐等信息。

看到上面的第19和第18个section,就是堆和栈的大小size(160K与1M)。

还有Symbol符号表信息。

可以看到有5502的symbo符号,包括一些段symbol。

debug段调试信息

它就比较复杂了,包含debug frame、debug_line、debug_loc、debug_str等,需要知道其存储的格式,然后按照其方式去定位,addr2line就是这样解析和定位的。

4. elf文件

elf 文件是Linux OS下的可执行文件,格式与axf文件很像,同样可以使用Readelf指令去解析,但是稍有区别,ARM编译器编出axf文件,比如GCC会编译生成elf文件。
1、链接的可重定位文件
2、共享目标文件,
3、可执行文件。

版权声明:
作者:ZhangYixi
链接:http://zyixi.xyz/bin%e3%80%81hex%e3%80%81elf%e3%80%81axf%e6%96%87%e4%bb%b6%e7%9a%84%e8%ae%a4%e8%af%86/
来源:一西站点
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>