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