Динамическое разрешение символов исполняемого файла с использованием LLVM

Я сейчас пользуюсь LLVM's ObjectFile (документально Вот) представлять исполняемый файл. Я успешно прочитал в исполняемом файле ObjectFile и хотел бы определить, какие адреса назначения вызовов в моем исполняемом файле соответствуют именам символов, содержащихся в symbol_iterator получено путем звонка в begin_dynamic_symbols() функция. Итерация по каждому из символов в symbol_iterator дает мне имя каждого символа и его адрес, но поскольку символы являются динамическими, адрес каждого символа равен -1; это указывает на то, что ObjectFile не связывает имена символов напрямую с их соответствующими адресами назначения вызовов.

Есть ли способ определить, какие адреса назначения вызовов соответствуют каким динамическим символам в ObjectFile? Я бы предпочел не рассчитывать вручную все прыжки через PLT а также GOT если я могу избежать этого.

12

Решение

Адреса динамических символов рассчитываются только тогда, когда объектные файлы загружаются в память и связываются с таблицей символов программы. Как правило, невозможно определить их окончательный адрес перед установкой ссылки.

Вы можете получить нужные данные, используя модуль LLVM Link-Time Optimization вместо ObjectFile, так как он выполняет связывание адресов при загрузке модуля, если я правильно помню.

Удачи!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]