Связать символы с абсолютным адресом в двоичном формате PIC - PullRequest
0 голосов
/ 15 октября 2018

Я создаю новое изображение, которое состоит из нескольких двоичных изображений (соединенных вместе с помощью скрипта 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 to и --just-symbols=fun.elf:

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

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

1 Ответ

0 голосов
/ 18 октября 2018

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

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

...