Я пытаюсь связать свой код с внешней библиотекой stati c, в которой есть этот фрагмент кода в двоичном виде: смещение вместо нулей:
00000000000175c0 <some_method>:
175c0: 48 8d 05 39 aa 20 00 lea 0x20aa39(%rip),%rax # 222000 <some_method.method>
175c7: c3 retq
Смещение 222000 должно быть в разделе .data в соответствии с выводом readelf, который должен быть в порядке, но проблема в том, что мне нужно скопировать свой двоичный файл код «как есть» в некотором пространстве памяти и запускать его оттуда, без использования каких-либо загрузчиков ОС, которые знают, как перемещать различные разделы двоичного файла в адресном пространстве процесса. Адрес памяти, в который я загружаю свой двоичный файл, также может измениться, поэтому я также не могу использовать не относительные смещения stati c в моем коде.
Я хочу, чтобы все мои относительные смещения RIP в коде находились только в диапазоне размера двоичного файла, поэтому, например, если размер моего двоичного файла составляет 0x10000 байтов, и я загружаю его по адресу 0x200000, я не хотите любые смещения до go за пределами адреса 0x210000. Есть ли способ каким-то образом указать компоновщику это сделать?