微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这个 vmovdqu 会触发 EXCEPTION_ILLEGAL_INSTRUCTION?

如何解决为什么这个 vmovdqu 会触发 EXCEPTION_ILLEGAL_INSTRUCTION?

我开发了一个程序,将 DLL 注入其他程序并劫持其中的某些功能。它将这些功能重新路由到我的手写机器代码。一些用户发现,当使用这些功能时,注入的程序会立即崩溃。我无法在我的计算机上重现这个崩溃(我目前怀疑它是特定于处理器的),但我确实有一个用户让我远程调试。我发现它在第一条 vmovdqu 指令上崩溃,Windows 抛出 SEH EXCEPTION_ILLEgal_INSTRUCTION 异常。

        0x9c,// push rflags
        0x50,// push rax
        0x53,// push rbx
        0x51,// push rcx
        0x52,// push rdx
        0x54,// push rsp
        0x55,// push rbp
        0x56,// push rsi
        0x57,// push rdi
        0x41,0x50,// push r8
        0x41,0x51,// push r9
        0x41,0x52,// push r10
        0x41,0x53,// push r11
        0x41,0x54,// push r12
        0x41,0x55,// push r13
        0x41,0x56,// push r14
        0x41,0x57,// push r15
        // https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention
        // https://stackoverflow.com/questions/43358429/save-value-of-xmm-registers
        0x48,0x83,0xec,0x20,// sub rsp,0x20
        0xc5,0xfa,0x7f,0x24,// vmovdqu [rsp],xmm4
        0xc5,0x6c,0x10,// vmovdqu [rsp+0x10],xmm5
        0x48,0x8d,0x94,0xa8,0x00,// lea rdx,[rsp+0xa8]
        0x48,0xb9,// mov rcx,@this
        0x48,0xb8,// mov rax,@TextHook::Send
        0x48,0x89,0xe3,// mov rbx,rsp
        0x48,0xe4,0xf0,// and rsp,0xfffffffffffffff0 ; align stack
        0xff,0xd0,// call rax
        0x48,0xdc,// mov rsp,rbx
        0xc5,0x6f,// vmovdqu xmm5,XMMWORD PTR[rsp + 0x10]
        0xc5,// vmovdqu xmm4,XMMWORD PTR[rsp]
        0x48,0xc4,// add rsp,0x20
        0x41,0x5f,// pop r15
        0x41,0x5e,// pop r14
        0x41,0x5d,// pop r13
        0x41,0x5c,// pop r12
        0x41,0x5b,// pop r11
        0x41,0x5a,// pop r10
        0x41,0x59,// pop r9
        0x41,0x58,// pop r8
        0x5f,// pop rdi
        0x5e,// pop rsi
        0x5d,// pop rbp
        0x5c,// pop rsp
        0x5a,// pop rdx
        0x59,// pop rcx
        0x5b,// pop rbx
        0x58,// pop rax
        0x9d,// pop rflags

我从 https://defuse.ca/online-x86-assembler.htm 生成这些字节 - 我不完全确定它们是正确的。

有人知道问题是什么吗?遇到此问题的用户使用的是 AMD Phenom II X4 980,它在我的英特尔酷睿 i7-9750H 上运行良好

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。