如何使用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字段指向正确的“地址”.