Я сейчас пользуюсь LLVM's
ObjectFile
(документально Вот) представлять исполняемый файл. Я успешно прочитал в исполняемом файле ObjectFile
и хотел бы определить, какие адреса назначения вызовов в моем исполняемом файле соответствуют именам символов, содержащихся в symbol_iterator
получено путем звонка в begin_dynamic_symbols()
функция. Итерация по каждому из символов в symbol_iterator
дает мне имя каждого символа и его адрес, но поскольку символы являются динамическими, адрес каждого символа равен -1; это указывает на то, что ObjectFile
не связывает имена символов напрямую с их соответствующими адресами назначения вызовов.
Есть ли способ определить, какие адреса назначения вызовов соответствуют каким динамическим символам в ObjectFile
? Я бы предпочел не рассчитывать вручную все прыжки через PLT
а также GOT
если я могу избежать этого.
Адреса динамических символов рассчитываются только тогда, когда объектные файлы загружаются в память и связываются с таблицей символов программы. Как правило, невозможно определить их окончательный адрес перед установкой ссылки.
Вы можете получить нужные данные, используя модуль LLVM Link-Time Optimization вместо ObjectFile, так как он выполняет связывание адресов при загрузке модуля, если я правильно помню.
Удачи!
Других решений пока нет …