ELF and BIN

elf    

    Linux系统上运行的可执行程序是可以是a.out或elf, elf文件开头4个字节,格式为 "0x7F"、"E"、"L"、"F"; 十六进制: 7F 45 4C 46。提一下a.out,它是assembler output (汇编程序输出)的缩写形式。老式的BSD文档里甚至有下面的提示:a.out - 汇编程序和链接编辑输出格式。

bin
    原始的二进制格式,内部没有地址标记,二进制格式下载,绝对地址烧写到Flash中就可以启动了;如果下载运行,则下载到编译时的地址。

hex
    HEX 文件是记录文件行的ASCII文本文件,在 hex 文件中,每一行是一个hex记录,由十六进制数组成的机器码或者数据常量。hex常用于将程序或数据烧写到 ROM,EPROM。

    文件的内容:

        1. BIN文件是 raw binary 文件,这种文件只包含机器码。
        2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。

    文件的执行:

        1. 执行raw binary只需要将程序加载到其起始地址;
        2. 执行ELF程序则需要一个ELF Loader。

            uboot 和 Linux kernel 启动的时候是没有ELF Loader的,所以烧在flash上的文件只能是raw binary格式的,即镜像文件image。

    文件的调试:

        1. elf文件调试一般使用:

扫描二维码关注公众号,回复: 12620946 查看本文章

            nm vmlinux                # 得到符号表
            objdump -s vmlinux  # 反汇编,且汇编代码与源码混排

        2. bin文件里面全是机器码,只能反汇编

            objdump -D -b binary -m  arm xxx.bin > xxx.s

            -D 反编译所有代码
            -m 主机类型, arm
            -b 文件格式, binary

猜你喜欢

转载自blog.csdn.net/xiaozhiwise/article/details/112243507