Мне нужно знать, из какой переменной составлен регистр двоичной инструкции в файле obj.
Вкратце: отображение из регистра в переменную для каждой инструкции
Пример: предположим, что objdump дает фрагмент файла obj в виде:
MOV R1 5 # move 5 to register R1
SW R2 SP[-20] # store the value of R2 to address SP-20
Как мы могли знать, что R1 хранит переменную, скажем, var1 из исходного кода? А R2 хранит var2 ?
Я искал в документации readelf , к сожалению, зря.
(Хотя это может дать мне отображение строки между источником и двоичным файлом, это не поможет мне больше)
Затем я искал некоторые варианты отладки gcc и компоновщика. Нашел полезную информацию, но они до сих пор не решили мою проблему.
Информация, которую я нашел:
- Опция -fdump-rtl-vartrack может отслеживать все переменные и представляется полезной. Но я не нашел ожидаемый файл дампа * .vartrack при компиляции с этой опцией.
- Опция * fdump-rtl-vartrack-uid показывает уникальный идентификатор (DECL_UID) для каждой переменной. Но я получил эту ошибку при использовании: cc1: error: нераспознанная опция командной строки "-fdump-tree-uid"
- Option fdump-rtl-lreg выводит локальное распределение регистров, но я не понимаю, как он может подсказать мне преобразование из reg в переменную.
У кого-нибудь есть опыт или идея?
Спасибо всем!
взломать ...