Как я могу загрузить постоянное значение в регистр с плавающей запятой st0? - PullRequest
1 голос
/ 25 марта 2019

Я считаю, что правильный способ сделать это заключается в следующем:

const1:     dq  1.2345
...
     fld    const1

Тем не менее, я использую Cheat Engine для обратного инжиниринга игры (так что я могу понять это лучше).И он показывает следующую ошибку:

cheat engine showing the constant value cannot be loaded

Может кто-нибудь сказать, пожалуйста, что здесь не так?В идеале я хотел бы, чтобы вторая команда была:

fstp dword [esi+ 3C]

Но прежде чем сделать это, мне нужно загрузить значение 93,5 в регистр st (0).Как мне этого добиться?

1 Ответ

3 голосов
/ 05 мая 2019

Существует ряд ошибок, связанных с синтаксисом, вызывающих вашу проблему.

"эта инструкция не может быть скомпилирована" Вы помещаете данные в раздел кода. Определите вашу переменную вне блока newmem и внутри отдельного блока памяти. Вы пытаетесь определить блок памяти с помощью «val:», но вы не выделили эту память. Вы также не можете ссылаться на него, не зарегистрировав символ.

Для определения обычного числа с плавающей запятой вы используете 4-байтовую переменную, а не 8-байтовую переменную, поэтому вы используете «dd», а не «dq», во-вторых, вам нужно «привести» его к float.

Ваша инструкция, которую вы хотите поместить в стек FPU, является следующей: поле 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]

Имейте в виду, что вам нужно будет использовать оставшуюся часть сгенерированного шаблона, это просто код для исправления ошибок, обнаруженных в вашем вопросе.

...