逆向工程,左移7位

| 我一直在尝试对游戏功能进行逆向工程,但是我有点困惑。我是逆向工程的新手(我正在使用ollydbg btw),所以我还真的不知道所有的技巧和细节。 无论如何,这是我的问题。当您拾取游戏中的任何物品时,将调用此函数。然后,它计算项目的价值,并将该价值添加到您的分数中。在调用该函数之前,会推送一个值,我非常确定该值是项的ID。 这是令我困惑的代码:
SHL ESI,7
MOV CX,WORD PTR DS:[EDX+ESI+42]
ESI =物料的ID EDX =恒定值FE56A0 我猜想EDX(FE56A0)是项数组的开始,ESI是项的索引,而42则是项所持有的值的索引。不过这有点奇怪,因为您将ESI左移了7。随着ESI的增加,它的移位值不会线性增长。 因此,如果EDX表示数组的开头,而ESI将是索引,则数组中的项目大小将不相等。 这段代码的含义使我感到困惑。 任何人都知道此代码可以代表什么?     
已邀请:
该数组可能包含128个字节长的结构。移位7乘以ID乘以128,得到访问该ID的结构所需的偏移量。 42是该结构的偏移量。 这是可行的,因为乘法实际上会线性增加乘法索引:
0 << 7 == 0
1 << 7 == 128
2 << 7 == 256
3 << 7 == 384
等等 此代码段仅访问存储在数组中的结构的成员。     
EDX可能指向该数组所在的某个结构的起点。数组之前的数据需要42个字节,而数组中的每个元素都需要128个字节。 (1 << 7是128-移位通常用作乘以2的幂的快速方法。)例如,如下所示:
// EDX points here
struct GameItems
{
   int numItems;
   int stuff;
   int moreStuff;
   char[30] data;
   GameItem[MAX_ITEMS] items;  // offset 42 bytes from start
};

struct GameItem
{
   // 128-bit structure
}
    

要回复问题请先登录注册