Связать символы с абсолютным адресом в двоичном формате PIC

Я создаю новое изображение, которое состоит из нескольких двоичных изображений (соединенных вместе через скрипт Python). Проблема в том, что последнее двоичное изображение должно быть скомпилировано с помощью fPIC, а предыдущие изображения - нет. Последнее изображение (скомпилированное с помощью fPIC) повторно использует функции из других двоичных изображений с --just-symbols,

Проблема в том, что когда я пытаюсь вызвать функцию из другого двоичного файла (символ, полученный --just symbols), адрес символа является относительным, а не абсолютным, что вызывает серьезную ошибку.

Как связать символы с абсолютным адресом в двоичном коде PIC?

Пример кода:

Файл fun.c, скомпилированный в fun.elf, разделили до fun.bin:

int fun(int a,int b)
{
    print("help\r\n");
}

Файл fail.c скомпилирован с -fPIC и --just-symbols=fun.elf:

int fail(void)
{
    fun(1,3); 
}

В примере адрес fun в fail.bin является относительным, а не абсолютным.

1 ответ

Итак, после еще одного исследования я обнаружил, что это невозможно сделать. Вы не можете заставить компьютер приложения, который был скомпилирован с флагом fPIC, не использовать PIC для специальных символов (в моем случае символы из --just-symbols).

Решение, которое я выбрал, на самом деле разбирает не PIC-файл эльфа и получает адреса для необходимых функций. используйте эти адреса и приведите их к нужной функции.

Другие вопросы по тегам