我正在使用linaro工具链为ARM平台生成ELF文件。 该文件是一个应该运行裸机的可执行文件。
我使用链接描述文件来选择内存中各节的位置,因为我想将特定的节放在特定的位置。
问题在于,当我在内存中向前移动某个部分时,我发现虽然没有添加其他数据,但图像尺寸会增加。
当我运行readelf -a elf_file
时,我发现虚拟地址(请参阅下面的Address
字段)和图像中的偏移(请参阅下面的Offset
字段)都会增加。
示例:
链接描述文件中的以下行
. = 0x2000000;
.__translations_block_0 : { TM_TranslationTables.o(__translations_block_0) }
导致elf文件中的以下偏移量(来自readelf的输出)
[Nr] Name Type Address Offset Size EntSize Flags Link Info Align
[10] .tdata PROGBITS 0000000000279000 00279080 000000000000000c 0000000000000000 WAT 0 0 16
[11] .tbss NOBITS 0000000000279080 0027908c 0000000000011bcc 0000000000000000 WAT 0 0 16
[12] .__translations_b PROGBITS 0000000002000000 02000080 0000000000000008 0000000000000000 WA 0 0 8
[13] .__translations_b PROGBITS 0000000002001000 02001080 0000000000000008 0000000000000000 WA 0 0 8
我的问题是:
有没有办法在不吹出图像尺寸的情况下增加某些部分的地址?我只想将该部分加载到内存地址0x2000000,我不希望图像大小为0x2000000。
任何帮助都将不胜感激。