我正在看游戏代码,看到了以下内容:

0x171    mov [rbp-30],r12w
....
0x210     movups xmm0,[rbp-30]


我很确定r12是整数(等于5)。所以,它是使用0x171将整数移动到movups的浮点寄存器吗? />有人可以告诉我通常如何将整数移至movups寄存器吗?

#1 楼

要将数字移动到XMM寄存器中,首先需要将该数字移动到内存地址中,因为您不能将立即数移动到XMM寄存器中(这意味着您不能执行类似mov XMM1,9的操作)。 >
如果需要,您可以分配自己的内存来存储数字,或者在您的方案中,如果可行,您可以在代码写入之前将代码将自己的值放入r12w或自己的值写完后放入[rbp-30]。

您感兴趣的指令将是MOVSSMOVSDMOVDMOVQ等。假设您选择先将自己的值放入[rbp-30]:

示例:movss xmm1,[rbp-30]

就您的值是整数而言,您可能会看到一条说明就像CVTSS2SI(将标量单精度浮点值转换为Doubleword整数)一样,位于您所在子程序中的某个位置。

评论


非常感谢!是的,我确实注入了代码来更改此hack的r12,但它仍然让我感到困惑:)

–塞巴斯蒂安finor
18年7月9日在17:03



但是,如果放在xmm0中的内存地址包含一个整数,那么在这里使用movups并不奇怪吗?

–塞巴斯蒂安finor
18年7月10日在11:53



不必要。数据一直是数据,直到被解释为止,但是在将其用于某物之前需要先对其进行解释,因此无论出于优化,更快的计算速度还是其他目的,都可以出于各种原因移动数据。您必须至少反转所处子例程的某些部分(以及可能与值相关的其他例程),才能完全理解为什么在最终解释为整数之前按原样传输值。

–dsasmblr
18年7月10日在12:28