Vinculando símbolos a endereços fixos no Linux

Como alguém ligaria (alguns) símbolos a endereços fixos específicos usando o GNU ld para que o binário ainda pudesse ser executado normalmente no Linux (x86)? Não haverá acesso a esses símbolos, mas seus endereços são importantes.

Por exemplo, eu teria a seguinte estrutura:

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

struct FooBar foobar;

Eu gostaria de vincularfoobar para abordar 0x76543210, mas vincule as bibliotecas padrão e o restante do aplicativo normalmente. O aplicativo fará uso do endereço do foobar, mas não fará referência à memória (possivelmente inexistente) por trás dele.

A lógica para essa solicitação é que essa mesma fonte possa ser usada em duas plataformas: na plataforma nativa,Register32 pode ser simplesmente umvolatile uint32_t, mas no LinuxRegister32 é um objeto C ++ com o mesmo tamanho de umuint32_t que define, por exemplooperator=, que usará o endereço do objeto e envia uma solicitação para uma estrutura de comunicação com esse endereço (e os dados) para executar o acesso real no hardware remoto. O vinculador garantiria, assim, aRegister32 os campos da estrutura se referem aos "endereços" corretos.

questionAnswers(3)

yourAnswerToTheQuestion