带有 DAT_ 的 CMP ecx

逆向工程 部件 调试
2021-07-01 02:41:53

于是就遇到了这么一段汇编代码:

cmp dword ptr [ECX + 0x24c], DAT_007c6bc0

ECX + 0x24cDAT_007c6bc0. 如果它们不相等,它将从函数中返回。

我比较了 Ghirda 和 IDA(免费)的输出,在 IDA 中它看起来像这样:

cmp dword ptr [ecx + 24Ch], offset unk_7C6BC0

现在,究竟是DAT_007c6bc0什么?我真的找不到任何关于它的信息,它与它相比如何,ECX + 0x24c因为它只是检查地址是否相同,对吗?

1个回答

在此示例中,DAT_007c6bc0(或offset unk_7C6BC0) 只是程序(虚拟)地址空间中的一个地址。

现在,将它与 进行比较[ECX + 0x24c],是将此地址与位于 ECX + 0x24c程序虚拟地址空间中数据进行比较而不是ECX + 0x24c. 这只是一个指针比较(dword ptr意味着我们将这些数字视为dwords-4每个字节);在伪代码中,它可能如下所示:

if (*(ECX + 0x24c) != DAT_007c6bc0)
    return;

换句话说,如果d是位于DAT_007c6bc0内存中的数据( d = *DAT_007c6bc0),则代码将检查数据 atECX + 0x24c是否是指向 的指针d