将整数移动到 xmm 寄存器

逆向工程 部件 登记 amd64 漂浮
2021-06-13 22:52:54

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

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

我很确定这r12是一个整数(等于 5)。那么,它是否在0x171使用时将整数移动到浮点寄存器movups

我在互联网上搜索过,但movups通常将浮点数移动到浮点数,而不是整数到浮点数...

有人能告诉我我们通常如何将整数移动到xmm寄存器吗?

1个回答

要将数字移动到 XMM 寄存器中,您首先需要将该数字移动到内存地址中,因为您无法将立即数移动到 XMM 寄存器中(也就是说,您不能执行类似的操作mov XMM1,9)。

如果需要,您可以分配自己的内存来存储数字,或者在您的场景中,如果可行,您可以在写入之前注入代码以将您自己的值放入 r12w 中,或者将您自己的值放入 [rbp-30 ] 之后写。

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

示例movss xmm1,[rbp-30]

就您的值是整数而言,您可能会在您所在的子例程中的某处看到像 CVTSS2SI(将标量单精度浮点值转换为双字整数)这样的指令。