【问题标题】:How elf file loaded correct memory address and executed successfully?elf文件如何加载正确的内存地址并成功执行?
【发布时间】:2016-05-22 15:22:00
【问题描述】:

据我所知,bin 和 elf 之间的基本区别是

bin 文件只包含位或字节的数据,当你将它加载到内存中时,你需要给出内存地址,

而对于elf,它具有符号查找和可重定位表,因此在编程时无需提供地址。

现在见attached image。我正在使用 LPCexpresso 在设备中编写 elf 文件。如果您不提供基地址,则默认情况下它将采用 0x00000000。现在我先编程bootloader.elf,然后再编程main.elf。在这两种情况下,我都没有给出基地址。

现在我的问题是,如果我没有给出地址,那么elf 文件如何决定编程正确的位置,并且在编程一个图像之后,如果我编程另一个图像,那么它不是覆盖第一个图像吗? (因为在这两种情况下我们都没有给出地址,默认情况下它是 0x00000000)

【问题讨论】:

    标签: arm elf bin flash-memory nxp-microcontroller


    【解决方案1】:

    通常此信息位于链接描述文件创建的 ELF 文件中。

    作为 GNU binutils 的一部分,有一个名为“readelf”的工具,它显示有关 ELF 部分和标题的信息。不幸的是,这些工具根据其配置工具使用前缀,很可能它会被称为“arm-none-readelf”。如果没有,请查看http://www.yagarto.org/

    因此,如果您输入“arm-none-readelf main.elf -a”,它应该会显示如下内容:

    ELF Header:
      Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
      Class:                             ELF32
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              EXEC (Executable file)
      Machine:                           YOUR ARCHITECTURE
      Version:                           0x1
      Entry point address:               YOUR ENTRY ADDRESS
      Start of program headers:          52 (bytes into file)
      Start of section headers:          YOUR SIZE
      Flags:                             0x300
      Size of this header:               52 (bytes)
      Size of program headers:           32 (bytes)
      Number of program headers:         36
      Size of section headers:           40 (bytes)
      Number of section headers:         55
      Section header string table index: 52
    

    (请注意,这只是示例数据)。

    通常在所有编译器中都有允许指定 ELF 的加载地址的链接器选项(通常称为 .ld 文件)。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 2015-09-10
      • 1970-01-01
      • 2011-05-15
      • 2021-02-25
      • 2017-01-22
      • 2011-09-27
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多