Vinculación de símbolos a direcciones fijas en Linux
¿Cómo se podría vincular (algunos) símbolos a direcciones fijas específicas usando GNU ld para que el binario aún se pudiera ejecutar normalmente en Linux (x86)? No habrá ningún acceso a esos símbolos, pero sus direcciones son importantes.
Por ejemplo, tendría la siguiente estructura:
struct FooBar {
Register32 field_1;
Register32 field_2;
//...
};
struct FooBar foobar;
Me gustaria enlazarfoobar
para abordar 0x76543210, pero vincula las bibliotecas estándar y el resto de la aplicación normalmente. La aplicación hará uso de la dirección de foobar, pero no hará referencia a la memoria (posiblemente inexistente) detrás de ella.
La razón de esta solicitud es que esta misma fuente se puede usar en dos plataformas: en la plataforma nativa,Register32
simplemente puede ser unvolatile uint32_t
, pero en LinuxRegister32
es un objeto C ++ con el mismo tamaño que unuint32_t
que define p.operator=
, que luego usará la dirección del objeto y enviará una solicitud a un marco de comunicación con esa dirección (y los datos) para realizar el acceso real en el hardware remoto. El enlazador aseguraría asíRegister32
Los campos de la estructura se refieren a las "direcciones" correctas.