将符号链接到Linux上的固定地址

如何使用GNU ld将链接(某些)符号链接到特定的固定地址,以便二进制文件仍然可以在 Linux(x86)中正常执行?不会访问这些符号,但是它们的地址很重要.

例如,我将具有以下结构:

struct FooBar {
    Register32 field_1;
    Register32 field_2;
    //...
};

struct FooBar foobar;

我想将foobar链接到地址0x76543210,但通常链接标准库和应用程序的其余部分.然后应用程序将使用foobar的地址,但不会引用它后面的(可能不存在的)内存.

这个请求的理由是,同一个源可以在两个平台上使用:在本地平台上,Register32可以简单地是一个易失性的uint32_t,但是在Linux上,Register32是一个与uint32_t大小相同的C对象,operator =,然后使用对象的地址,并向具有该地址(和数据)的通信框架发送请求,以执行远程硬件上的实际访问.因此,链接器将确保结构的Register32字段指向正确的“地址”.

解决方法

litb使用–defsym symbol = address的建议可以正常工作,但是当您有几十个这样的实例来映射时,它有点麻烦.然而,–just-symbols = symbolfile只是窍门.花了我一段时间找出符号文件的语法
symbolname1 = address;
symbolname2 = address;
...

空格似乎是必需的,否则ld报告文件格式不被识别;作为链接器脚本.

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...