我有一个用 linaro gcc 编译的裸机独立精灵图像。我需要找出该图像中的最后一个地址。我尝试使用objcopy -O ihex
,并编写一个小脚本来解析 ihex 输出,但如果地址超过 2G 地址空间,则会失败。那么 - 我怎样才能找出图像中的最后一个地址是什么?
这是针对 arm V8 64 位架构芯片的。
objcopy 可以用于此,还是我应该使用 linaro 工具链中的其他东西?objdump 也许?
任何帮助将不胜感激!
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 静态二进制文件的部分信息。感兴趣的是、VMA
和LMA
字段。提取它们并排序,然后添加到最终值。Size
Addr
Size