From e485f398467252106abb1da6b04a8afbe37c7f04 Mon Sep 17 00:00:00 2001 From: Duncan Ogilvie Date: Wed, 20 Jul 2022 13:59:27 +0200 Subject: [PATCH] Add a test to make sure VEX.L stops emulation with an error --- tests/regress/x86_vex.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/regress/x86_vex.c b/tests/regress/x86_vex.c index a05f2cf6..1808de42 100644 --- a/tests/regress/x86_vex.c +++ b/tests/regress/x86_vex.c @@ -47,12 +47,37 @@ static void test_vmovdqu(void) OK(uc_close(uc)); } +/* https://github.com/unicorn-engine/unicorn/issues/1656 */ +static void test_vex_l(void) +{ + uc_engine *uc; + uc_err err; + + /* vmovdqu ymm1, [rcx] */ + char code[] = { '\xC5', '\xFE', '\x6F', '\x09' }; + + /* initialize memory and run emulation */ + OK(uc_open(UC_ARCH_X86, UC_MODE_64, &uc)); + OK(uc_mem_map(uc, 0, 2 * 1024 * 1024, UC_PROT_ALL)); + + OK(uc_mem_write(uc, 0, code, sizeof(code) / sizeof(code[0]))); + + err = uc_emu_start(uc, 0, sizeof(code) / sizeof(code[0]), 0, 0); + if(err != UC_ERR_INSN_INVALID) { + fprintf(stderr, "%s", uc_strerror(err)); + assert(false); + } + + OK(uc_close(uc)); +} + /* TODO: Add more vex prefixed instructions Suggestions: vxorpd, vxorps, vandpd, ... */ int main(int argc, char **argv, char **envp) { test_vmovdqu(); + test_vex_l(); return 0; }