1

我相信正确的方法如下:

const1:     dq  1.2345
...
     fld    const1

但是,我正在使用 Cheat Engine 对游戏进行逆向工程(这样我可以更好地理解它)。它显示以下错误:

无法加载显示常量值的作弊引擎

有人可以告诉我这里有什么问题吗?理想情况下,我希望第二个命令是:

fstp dword [esi+ 3C]

但在我这样做之前,我需要将 93.5 值加载到 st(0) 寄存器中。我怎样才能做到这一点?

4

1 回答 1

4

有一系列与语法相关的错误导致您的问题。

“无法编译此指令”您将数据放入代码部分。在 newmem 块之外和单独的内存块内定义变量。您正在尝试使用“val:”定义一个内存块,但您尚未分配该内存。如果不注册符号,您也无法引用它。

要定义常规浮点数,您使用 4 字节变量而不是 8 字节变量,因此您使用“dd”而不是“dq”,其次您需要将其“转换”为浮点数。

您要将浮点数推送到 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]

请记住,您将需要使用生成的模板的其余部分,这只是修复问题中出现的错误的代码。

于 2019-05-05T17:30:06.483 回答