Что означает esi0a в инструкциях по сборке?

Я потратил около 6 часов на отладку кода с помощью Cheat Engine. Я столкнулся с чем-то действительно странным.

безумно странная инструкция

Инструкция гласит:

imul esi,esi0A

Что это значит?

ESI = 5 перед инструкцией После инструкции imul становится 32.


person Mugen    schedule 26.03.2019    source источник
comment
Итак, 0x0A = 10, а 5 умножить на 10 будет 50 = 0x32...   -  person Iwillnotexist Idonotexist    schedule 26.03.2019
comment
Спасибо! Любая идея, почему у нас есть esi дважды? Разве это не должно было быть просто esi,0a?   -  person Mugen    schedule 26.03.2019
comment
Нет, так как imul с непосредственной константой должен указывать как исходный, так и целевой регистры в соответствии с Intel SDM.   -  person Iwillnotexist Idonotexist    schedule 26.03.2019
comment
Тогда разве это не должно быть imul esi,esi,0a? Не хватает запятой. Во всяком случае, на мой вопрос дан ответ. Вы хотите опубликовать это как ответ, чтобы я мог пометить его как завершенный? Я думаю, что это будет полезно для тех, кто еще разбирается в тонкостях чит-движка.   -  person Mugen    schedule 26.03.2019


Ответы (1)


TL;DR

Данная инструкция, вероятно, предназначалась для

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 только напечатал его неправильно.

Формы инструкций IMUL

person Iwillnotexist Idonotexist    schedule 26.03.2019