Я потратил около 6 часов на отладку кода с помощью Cheat Engine. Я столкнулся с чем-то действительно странным.
Инструкция гласит:
imul esi,esi0A
Что это значит?
ESI = 5 перед инструкцией После инструкции imul становится 32.
Я потратил около 6 часов на отладку кода с помощью Cheat Engine. Я столкнулся с чем-то действительно странным.
Инструкция гласит:
imul esi,esi0A
Что это значит?
ESI = 5 перед инструкцией После инструкции imul становится 32.
Данная инструкция, вероятно, предназначалась для
imul esi, esi, 0x0A
, но Cheat Engine, вероятно, забыл напечатать запятую ,
.
Математический результат, который вы описываете, согласуется с 0x00000005
= 5, умноженным на 0x0A
= 10, чтобы получить 0x00000032
= 50.
Руководство для разработчиков программного обеспечения Intel, том 2A, §3.2 — IMUL - Signed Multiply
документирует функцию инструкции и допустимые формы. Из тех, которые допускают немедленные константы, единственные доступные формы требуют указания 1) регистра назначения, 2) исходного регистра и 3) непосредственной константы.
В данном конкретном случае очевидно, что это должны были быть соответственно esi
, esi
, 0x0A
. Cheat Engine только напечатал его неправильно.
0x0A
= 10, а 5 умножить на 10 будет 50 =0x32
... - person Iwillnotexist Idonotexist   schedule 26.03.2019imul
с непосредственной константой должен указывать как исходный, так и целевой регистры в соответствии с Intel SDM. - person Iwillnotexist Idonotexist   schedule 26.03.2019