Я пытался реконструировать функцию игры, но я немного запутался. Я довольно новичок в реверс-инжиниринге (я использую ollydbg, кстати), поэтому я пока не знаю обо всех хитростях и деталях.
В любом случае, вот моя проблема. Эта функция вызывается, когда вы берете любой предмет в игре. Затем он рассчитывает стоимость предмета и добавляет это значение к вашему счету. Перед вызовом функции передается значение, которое, я уверен, является идентификатором элемента.
Это код, который смущает меня:
SHL ESI,7
MOV CX,WORD PTR DS:[EDX+ESI+42]
ESI = идентификатор предмета
EDX = постоянное значение FE56A0
Я догадывался, что EDX (FE56A0) - это начало массива элементов, ESI - это индекс элемента, а 42 - индекс значения, которое содержит элемент. Это было бы странно, так как ваш бит смещает ESI влево на 7. По мере увеличения ESI его значение с битовым смещением не растет линейно.
Таким образом, если EDX представляет начало массива, а ESI будет индексом, элементы в массиве не будут иметь одинаковый размер.
Смысл этого кода меня озадачивает.
Кто-нибудь понял, что может представлять этот код?