Можно ли сгенерировать таблицу раскрутки по объектному файлу? - PullRequest
0 голосов
/ 02 марта 2019

Фон в том, что у нас есть готовый объектный файл без таблицы раскрутки, но каким-то образом у gcc unwind возникла проблема с возвратом объекта.Можно ли создать таблицу раскрутки без исходного кода?Учитывая, что таблица раскручивания основана на статике стека, она также доступна даже без исходного кода.

1 Ответ

0 голосов
/ 20 марта 2019

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

Большая практическая проблема заключается в том, что информация о разматывании DWARF структурирована по функциям.Пустой объектный файл (без отладочной информации и только минимальной таблицы символов) не захватывает информацию о границах функций.Без этого невозможно сказать, является ли местоположение в файле целью вызова функции и началом функции.Аналогичным образом, вызов функции возврата не может быть последней инструкцией в функции, даже если за ней не следует инструкция возврата.Может быть возможно использовать данные о перемещении.Есть несколько инструментов, которые пытаются определить границы функций;каждый дизассемблер до некоторой степени делает это.

Лучше всего найти функции, которые не удалось развернуть, и выяснить, почему, а затем компенсировать это, используя пользовательские данные для раскрутки или плагин GDB.Как сказал Алексей Фрунзе , полное преобразование будет довольно утомительным.

...