X86 非SSE2 CPU上SSE2 movq指令的快速解决方法

X86 非SSE2 CPU上SSE2 movq指令的快速解决方法,x86,sse,inline-assembly,sse2,X86,Sse,Inline Assembly,Sse2,如何将movqSSE2指令转换为一个简单的代码片段,然后将其修补为包含的原始EXE?如果您能提供样品直接说明,作为替换“模板”,那就更好了 我最感兴趣的是使用C语言将这种基于模板的替换编写到我的代码块项目中,所以我更喜欢使用内联ASM形式。通过这种方式,我可以通过编程将subst修补到5字节长的原始指令中,并使用ASM调用同一个C中的内联代码段来修补EXE(其余代码已经编写) 我知道这个问题听起来可能比你想的更一般,但任何洞察都将不胜感激。提前谢谢 只有MMX/SSE,选项有限 内存中的movq

如何将
movq
SSE2指令转换为一个简单的代码片段,然后将其修补为包含的原始EXE?如果您能提供样品直接说明,作为替换“模板”,那就更好了

我最感兴趣的是使用C语言将这种基于模板的替换编写到我的代码块项目中,所以我更喜欢使用内联ASM形式。通过这种方式,我可以通过编程将subst修补到5字节长的原始指令中,并使用ASM调用同一个C中的内联代码段来修补EXE(其余代码已经编写)


我知道这个问题听起来可能比你想的更一般,但任何洞察都将不胜感激。提前谢谢

只有MMX/SSE,选项有限

内存中的
movq
例如
movq xmm4,[edx]
可通过以下方式模拟:

xorps xmm4, xmm4
movlps xmm4, [edi]
movlps [edx], xmm5
内存中的
movq
movq[edx],xmm5
可通过以下方式模拟:

xorps xmm4, xmm4
movlps xmm4, [edi]
movlps [edx], xmm5

这是否有帮助:只是澄清一下:在我说了一个
movq%xmm0,[某个内存位置]
(这是Linux中的代码块)的情况下,当xmm0 reg为0时,我得到了它,例如
xor%eax,%eax
,然后在该位置的两个连续DWORD上修补它。但是,如果XMMn中以前有重要的值,该怎么办?如何将值“释放”到“正常”寄存器中,然后再放入内存?(对不起,我对x86标准ASM非常了解,但之前没有使用SSE/SSE2的经验…@DanielA.White谢谢,不确定是否适用。是否有任何标准方法可以将一个
movq
分成两半,在SSE2较少的CPU中执行?我需要使用标准寄存器吗?是否有任何SSE2更少的“将XMMn的一半写入DWORD”,我可以对当前加载的FP值使用两次?我很困惑,因为我看到了CPU正常处理和执行的一些其他SSE(我想不是2)指令。这只是原始代码中的几个movq,我很烦!(这是已编译的代码,如果我有源代码,我可以使用SSE2更少的swtich/es重新编译…)