bit - 逆向工程,左移七位

标签 bit shift ollydbg

我一直在尝试对游戏的功能进行逆向工程,但我有点困惑。我对逆向工程还很陌生(顺便说一句,我正在使用 ollydbg),所以我还不太了解所有的技巧和细节。

无论如何这是我的问题。当您在游戏中拾取任何元素时调用此函数。然后它会计算该项目的值(value)并将该值添加到您的分数中。在调用该函数之前,将推送一个值,我非常有信心它是项目的 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

等等

此代码片段只是访问存储在数组中的结构的成员。

关于bit - 逆向工程,左移七位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5723586/

相关文章:

c - 如何一次访问连续的结构体位字段成员?

C 循环移位 64 位无法正常工作

python - 使用 ord 和 chr 移动字母

concatenation - 如何使用串联通过 std_logic_vector 移动 std_logic_vector

windows - OllyDbg 不能在 Windows 7 x64 上运行

bit-manipulation - 求一个数的平方

Lua:十六进制字到二进制的转换

debugging - 在打包的 EXE 文件中查找 OEP

debugging - 如果图像在只读内存中,调试器如何设置断点?

c - 在右边和左边用 1 填充位表示