如何使用 GNU ld 将(某些)符号链接到特定的固定地址,以便二进制文件仍然可以在 Linux(x86)中正常执行?不会对这些符号进行任何访问,但它们的地址很重要。
例如,我将具有以下结构:
struct FooBar {
Register32 field_1;
Register32 field_2;
//...
};
struct FooBar foobar;
我想链接foobar
到地址 0x76543210,但要正常链接标准库和应用程序的其余部分。然后应用程序将使用 foobar 的地址,但不会引用它后面的(可能不存在的)内存。
这个请求的基本原理是这个相同的源可以在两个平台上使用:在本机平台上,Register32
可以简单地是 a volatile uint32_t
,但在 Linux 上是一个与定义 egRegister32
的 a 大小相同的 C++ 对象,然后它将使用地址对象并使用该地址(和数据)向通信框架发送请求,以执行对远程硬件的实际访问。因此,链接器将确保结构的字段引用正确的“地址”。uint32_t
operator=
Register32