From c1c0baec7d85ed34064ca361846bcb46e3ef34a3 Mon Sep 17 00:00:00 2001 From: lazymio Date: Thu, 10 Sep 2020 10:02:22 +0800 Subject: [PATCH] Fix IP value for UC_MODE_16 (#1321) --- qemu/target-i386/unicorn.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/qemu/target-i386/unicorn.c b/qemu/target-i386/unicorn.c index 7c4ca998..9ab5dd22 100644 --- a/qemu/target-i386/unicorn.c +++ b/qemu/target-i386/unicorn.c @@ -27,7 +27,12 @@ const int X86_REGS_STORAGE_SIZE = offsetof(CPUX86State, tlb_table); static void x86_set_pc(struct uc_struct *uc, uint64_t address) { - ((CPUX86State *)uc->current_cpu->env_ptr)->eip = address; + CPUState* cpu = uc->cpu; + int16_t cs = (uint16_t)X86_CPU(uc, cpu)->env.segs[R_CS].selector; + if(uc->mode == UC_MODE_16) + ((CPUX86State *)uc->current_cpu->env_ptr)->eip = address - cs*16; + else + ((CPUX86State *)uc->current_cpu->env_ptr)->eip = address; } void x86_release(void *ctx);