Связать символы с абсолютным адресом в двоичном формате 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-файл эльфа и получает адреса для необходимых функций. используйте эти адреса и приведите их к нужной функции.