Динамическое переключение Capstone с ARM на THUMB
Я пытаюсь написать простой скрипт для разборки байт-кода ARM/THUMB. В ARM очень распространено переключение из одного режима в другой, и поэтому очень важно, чтобы дизассемблер мог следить за этим. У меня проблемы с этим, хотя в документации сказано, что это очень просто (см. https://www.capstone-engine.org/lang_python.html). Мне кажется, что это не работает во время выполнения.
Вот как выглядит мой тест:
for i in md.disasm(CODE, 0x1000):
print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))
if i.mnemonic == "bx":
md.mode = cs.CS_MODE_THUMB
Обратите внимание, что он действительно переходит в режим большого пальца, но не во время цикла. Поэтому происходит то, что код полностью дизассемблирован в ARM, но если я запустил его снова, он будет полностью дизассемблирован в THUMB.
Заранее спасибо за вашу помощь
0 ответов
disasm
разбирает несколько инструкций за один вызов, поэтому к тому времени, когда вы измените режим, будет уже слишком поздно.
Вы можете разбирать по одной инструкции за раз или использовать
cs_disasm_iter
.
Ссылка для справки: https://www.capstone-engine.org/iteration.html