1

有人如何通过 IDA PRO 中的偏移量获得结果函数 1002DDCC3 的实际位置/地址?特别是“a1 + 0x2E0”部分。

它显然调用了一个新函数 sub_100xxxxx;

比方说

a1 == 942691698;

int (__stdcall *__stdcall QueryInterface(unsigned int a1))(int)
{
 if ( a1 == 942691698 )
            return (int (__stdcall *)(int))sub_1002DDC3;
}

int __stdcall sub_1002DDC3(int a1, int a2)
{
  int result; // eax@2

  if ( a1 )
    result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)a1 + 0x2E0))(a2);
  else
    result = -1;
  return result;
}

功能 1002DDC3 的原始组装是http://img.techpowerup.org/121010/Capture.png

4

2 回答 2

2

你的措辞非常不清楚。假设这QueryInterface()确实与以下内容有关IUnknown::QueryInterface()

如果您要问“”的返回值是什么意思sub_1002DDC3(),那可能是HRESULT。这里最重要的值是零 ( S_OK)、-1(一般错误)和非零(特定错误)。

还是您在问“地址是sub_1002DDC3()什么?”

如果您可以发布原始反汇编,实际上会更容易理解这一点。

编辑添加

接口方法的地址是在运行时确定的。反汇编程序事先不知道地址,因此无法告诉您正在调用哪个方法。

是的,您需要单独反汇编 COM 对象。

于 2012-10-10T15:02:16.183 回答
1

这取决于“a1”参数的值。由于可以使用不同的 'a1' 值调用此函数,因此仅通过查看列表无法判断。您必须在调试器下运行它或检查调用者。

于 2012-10-10T14:30:29.177 回答