问题描述
我开发了一个程序,将 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 (将#修改为@)