Как отличить инструкцию большого пальца от инструкции руки в файле эльфа?
Как видно из заголовка, я хочу разобрать файл elf, но у меня возникла проблема, заключающаяся в том, что я не мог знать, какая инструкция является инструкцией руки, а какая - командой большого пальца. Поскольку инструкция arm является 32-битной, а инструкция thumb - 16-битной, способ разборки отличается. Так как я могу обнаружить инструкцию thumb из шестнадцатеричных инструкций?
1 ответ
В ELF-файле существует простой метод - просто посмотрите на адреса функций в таблице символов. Как и целевые адреса для взаимодействующих ветвей, нижний бит адреса символа указывает соответствующий набор инструкций - очищенный для функций ARM и установленный для функций Thumb (см. Раздел 4.5.3 ABI ELM ARM).