0

我正在使用 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。

任何帮助,将不胜感激。

4

0 回答 0