前缀 REPNE 指令

逆向工程 拆卸 部件
2021-06-14 08:08:21

我正在分析具有一系列指令的恶意软件

前缀重复

0047094C  |.  8B0D 34935E00       |MOV ECX,DWORD PTR DS:[5E9334]
00470952  |.  F2:                 |PREFIX REPNE:
00470953  |.  0F2AC1              |CVTPI2PS XMM0,MM1
00470956  |.  F2:                 |PREFIX REPNE:
00470957  |.  0F100D 88905E00     |MOVUPS XMM1,DQWORD PTR DS:[5E9088]
0047095E  |.  F2:                 |PREFIX REPNE:
0047095F  |.  0F5CC8              |SUBPS XMM1,XMM0
00470962  |.  F2:                 |PREFIX REPNE:
00470963  |.  0F2CD1              |CVTTPS2PI MM2,XMM1
00470966  |.  8915 5C925E00       |MOV DWORD PTR DS:[5E925C],EDX

然而奇怪的是,当我调试时,紧跟在前缀 repne 后面的指令被跳过(当单步执行时)。我的直觉告诉我这只是垃圾代码,但我想确保不会发生其他事情,因为我必须重写这个特定的函数(使用了更多的 sse 指令)

如果有人能阐明一些观点,我将不胜感激。谢谢

1个回答

前缀不是垃圾 - 它们是原始指令的覆盖,以生成新指令。您的反汇编程序显然不知道 SSE2 指令,而是将它们分开。反汇编应该是这样的: 0047094C |. 8B0D 34935E00 |MOV ECX,DWORD PTR DS:[5E9334] 00470952 |. F20F2AC1 |CVTSI2SD XMM0,ECX 00470956 |. F20F100D 88905E00 |MOVSD XMM1,DQWORD PTR DS:[5E9088] 0047095E |. F20F5CC8 |SUBSD XMM1,XMM0 00470962 |. F20F2CD1 |CVTTSD2SI EDX,XMM1 00470966 |. 8915 5C925E00 |MOV DWORD PTR DS:[5E925C],EDX