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