如何找到带偏移量的指针 [ecx+eax*4](地址偏移量?)

How to find pointer w/ offset [ecx+eax*4] (address offset?)

我看过这个话题:How to find a point with offset eax+ebx*4

eax will be the pointer value to look for
ebx*4 will be the offset (ebx is the offset in an array with elements of 4 bytes long)
so:
ebx=0 : offset=0
ebx=1 : offset=4
ebx=2 : offset=8
ebx=3 : offset=c
ebx=4 : offset=10

但是我还是不明白如何确定ebx?

这是我的情况:我正在尝试获取 Red Faction: Guerrilla(gfwl 版本)的当前弹药指针

我看到当我加载另一个存档文件时这个弹药的地址被改变了。所以我使用 "Find out what writes to this address" 作为弹药指针(加载另一个保存文件后不再工作)

然后我加载另一个保存文件以查看它写入指针的内容: 结果是偏移量为[ecx+eax*4]

的指针

所以我做了一个这样的指针

ecx=00C1B988(地址00C1B988保存值:ECX=00C1B994)

EAX*4= 我不知道如何使用它,所以我只是输入:E71*4

但是当我加载另一个存档文件时它仍然不起作用。我卡在E71*4,E71应该换什么?我什至尝试搜索值 E71(或 3697),但我似乎无处可去。

通常当您看到 ecx+eax*4 时,它正在索引到一个数组中。 ECX 指向数组,EAX 是元素#,4 是元素的大小。通常,当您看到 4 或 8 时,这是因为它是一个指针数组,这是 x86 上指针的大小。

您看到的不是 encryption/obfuscation/anticheat。这就是面向对象 programming/C++ 被编译成程序集的方式。

您正在创建的指针链对您不起作用,解决方案是获取 weapon/player 对象的地址,以便您可以向其中偏移以获取弹药的地址。为此,您需要:

  • 手动查找另一个指针
  • 使用指针扫描仪找到另一个指针
  • 模式扫描+挂钩并将地址拉出寄存器

如果这可能是某种混淆,您可以通过挂钩指令并获取它的值来轻松获取 EAX 的值。