如何获取ARM映像的最后一个地址?

时间:2014-02-24 10:27:44

标签: gcc arm arm64 linaro

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

这适用于arm V8 64位架构芯片。

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

任何帮助都会得到满足!

1 个答案:

答案 0 :(得分:1)

objdumpreadelf都可以显示部分摘要。 objdump -hreadelf -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静态二进制文件的部分信息。有意义的是VMALMASizeAddr字段。提取它们并排序,然后将Size添加到最终值。