GCC,链接器脚本:解析为手动定义的地址的变量



我将使用一个简单的具体例子来说明我正在尝试做什么。

文件 main.c

#include <stdio.h>
unsigned int X;
int main()
{
    printf("&X = 0x%zXrn", &X);
    return 0;
}

我想知道是否有可能(使用链接器脚本/gcc 选项)在编译/链接时手动指定X地址,因为我知道它位于内存中的某个地方,在我的可执行文件之外。

只想知道这是否可能,我知道我可以使用指针(即 unsigned int* ) 访问特定的内存位置 (r/w),但这不是我想要的。

我想要的是让 GCC 生成代码,其中对全局变量/静态函数变量的所有访问要么通过间接级别完成,即通过指针(-fPIC不够好,因为静态全局变量不是通过 GOT 访问的)或者它们的地址可以手动指定(在链接/编译时)。

谢谢

我所追求的是让 GCC 生成所有访问的代码 全局变量/静态函数变量...他们的地址可以是 手动指定(在链接/编译时)。

可以使用链接器命令指定.bss节和.data节(分别包含未初始化和初始化的变量)的地址。变量在各部分中的相对位置取决于编译器/链接器。

如果您只需要放置单个变量,这可以通过extern声明它们并在文件中指定它们的地址来完成,例如 addresses.ld

X = 0x12345678;

(注意:=需要空格),它被添加到编译器/链接器参数中:

cc main.c addresses.ld

相关内容

  • 没有找到相关文章

最新更新