如何将常量值加载到浮点寄存器 st0 中?
How can I load a constant value into the floating point register st0?
我认为正确的做法如下:
const1: dq 1.2345
...
fld const1
但是,我正在使用 Cheat Engine 对游戏进行逆向工程(这样我可以更好地理解它)。并显示以下错误:
谁能告诉我这里出了什么问题?理想情况下,我希望第二个命令是:
fstp dword [esi+ 3C]
但在执行此操作之前,我需要将 93.5 值加载到 st(0) 寄存器中。我怎样才能做到这一点?
有一系列与语法相关的错误导致了您的问题。
"this instruction cannot be compiled"
您将数据放在代码部分。在 newmem 块之外和单独的内存块内定义变量。您正在尝试使用 "val:" 定义一个内存块,但您尚未分配该内存。你也不能在不注册符号的情况下引用它。
要定义常规浮点数,您使用 4 字节变量而不是 8 字节变量,因此您使用 "dd" 而不是 "dq",其次您需要将其 "cast" 为浮点数。
你想要将一个浮点数压入 FPU 堆栈的指令是这样写的:
fld dword ptr [val]
像您之前所做的那样创建注入模板,然后在顶部插入此代码并继续您正在做的事情,它包含我在答案中注意到的所有内容,并且我测试了它是否有效:
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
alloc(val,8)
val:
dd (float)93.5
registersymbol(val)
newmem:
fld dword ptr [val]
请记住,您将需要使用生成的模板的其余部分,这只是修复问题中出现的错误的代码。
我认为正确的做法如下:
const1: dq 1.2345
...
fld const1
但是,我正在使用 Cheat Engine 对游戏进行逆向工程(这样我可以更好地理解它)。并显示以下错误:
谁能告诉我这里出了什么问题?理想情况下,我希望第二个命令是:
fstp dword [esi+ 3C]
但在执行此操作之前,我需要将 93.5 值加载到 st(0) 寄存器中。我怎样才能做到这一点?
有一系列与语法相关的错误导致了您的问题。
"this instruction cannot be compiled" 您将数据放在代码部分。在 newmem 块之外和单独的内存块内定义变量。您正在尝试使用 "val:" 定义一个内存块,但您尚未分配该内存。你也不能在不注册符号的情况下引用它。
要定义常规浮点数,您使用 4 字节变量而不是 8 字节变量,因此您使用 "dd" 而不是 "dq",其次您需要将其 "cast" 为浮点数。
你想要将一个浮点数压入 FPU 堆栈的指令是这样写的: fld dword ptr [val]
像您之前所做的那样创建注入模板,然后在顶部插入此代码并继续您正在做的事情,它包含我在答案中注意到的所有内容,并且我测试了它是否有效:
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
alloc(val,8)
val:
dd (float)93.5
registersymbol(val)
newmem:
fld dword ptr [val]
请记住,您将需要使用生成的模板的其余部分,这只是修复问题中出现的错误的代码。