1

我有一个用 linaro gcc 编译的裸机独立精灵图像。我需要找出该图像中的最后一个地址。我尝试使用objcopy -O ihex,并编写一个小脚本来解析 ihex 输出,但如果地址超过 2G 地址空间,则会失败。那么 - 我怎样才能找出图像中的最后一个地址是什么?

这是针对 arm V8 64 位架构芯片的。

objcopy 可以用于此,还是我应该使用 linaro 工具链中的其他东西?objdump 也许?

任何帮助将不胜感激!

4

1 回答 1

1

objdump并且readelf都可以显示部分摘要。objdump -h并且readelf -S似乎是正确的选择。

例如,

$ objdump -h boot_flag

boot_flag:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .note.gnu.build-id 00000024  000080b4  000080b4  000000b4  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         00000310  000080d8  000080d8  000000d8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .rodata       00000030  000083e8  000083e8  000003e8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .data         00000004  00010418  00010418  00000418  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  4 .comment      0000003a  00000000  00000000  0000041c  2**0
                  CONTENTS, READONLY
  5 .ARM.attributes 0000002d  00000000  00000000  00000456  2**0
                  CONTENTS, READONLY

和...

$ readelf -S boot_flag
There are 8 section headers, starting at offset 0x4d0:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .note.gnu.build-i NOTE            000080b4 0000b4 000024 00   A  0   0  4
  [ 2] .text             PROGBITS        000080d8 0000d8 000310 00  AX  0   0  4
  [ 3] .rodata           PROGBITS        000083e8 0003e8 000030 01 AMS  0   0  4
  [ 4] .data             PROGBITS        00010418 000418 000004 00  WA  0   0  4
  [ 5] .comment          PROGBITS        00000000 00041c 00003a 01  MS  0   0  1
  [ 6] .ARM.attributes   ARM_ATTRIBUTES  00000000 000456 00002d 00      0   0  1
  [ 7] .shstrtab         STRTAB          00000000 000483 00004b 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

显示 ARM926 静态二进制文件的部分信息。感兴趣的是、VMALMA字段。提取它们并排序,然后添加到最终值。SizeAddrSize

于 2014-02-27T21:27:20.120 回答