如何将程序加载到内存中与预期地址不同的地址?

问题描述 投票:0回答:1

通常,用户程序二进制文件将加载到程序地址空间中的低地址(通常在

0x400000
附近),该地址空间将在
elf
二进制文件中指定(对于 linux)。

我们能否强制用户二进制文件加载到高地址,可能在加载

2GB
或其他此类库的地址范围内?
我尝试在网上寻找解决方案,但找不到任何具体的解决方案。

(我正在使用 Ubuntu 12.10 64 位操作系统)

c linux linker ld
1个回答
4
投票

编辑:

以上假设您正在使用现有的二进制文件。如果您自己生成二进制文件,则可以使用以下链接选项控制硬编码到其中的加载地址: libc

-Wl,-Ttext-segment,0x80000000

替换为您想要的地址。某些地址(例如保留给内核使用的地址,通常从 0xc0000000 开始)将不起作用,并且该地址必须页对齐(最后 3 个十六进制数字必须为 0)。

    

© www.soinside.com 2019 - 2024. All rights reserved.