如何解决Unicorn Engine - 同时模拟 ARM 和 THUMB 模式
我对汇编代码、Keystone 引擎和 Unicorn 引擎相当陌生,我在尝试解决逆向工程挑战时遇到了问题。
我得到了一些汇编代码,其中包含手臂和拇指模式指令(CODE16 和 CODE32)
然而,当初始化模拟器时,似乎只有两种选择。
mu = Uc(UC_ARCH_ARM,UC_MODE_ARM) or mu = Uc(UC_ARCH_ARM,UC_MODE_THUMB)
当我选择一个时,只运行一部分汇编代码。我正在使用 python 绑定。我是否正在尝试做一些不可能或不受支持的事情?
解决方法
只需像平常一样在任何模式下初始化,并在您可以的钩子内(在 C 中):
static void hook_code(uc_engine *uc,uint64_t address,uint32_t size,void *user_data)
{
uc_reg_read(uc,UC_ARM_REG_CPSR,&cpsr);
int thumb_state = cpsr & 0x20;
if (thumb_state){ // if thumb bit set...
// Do Thumb things (e.g capstone Thumb mode disassemble)
} else { // Arm mode set
// Do Arm things (e.g capstone Arm mode disassemble)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。