如何通过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
答案 0 :(得分:2)
你的措辞很不清楚。假设QueryInterface()
确实与IUnknown::QueryInterface()
有关:
如果您询问“sub_1002DDC3()
”的返回值的含义是什么,则可能是HRESULT。这里最重要的值是零(S_OK
), - -1(一般错误)和非零(特定错误)。
或者您在问“sub_1002DDC3()
的地址是什么?”
如果您可以发布原始反汇编,实际上更容易理解。
已编辑添加
接口方法的地址在运行时确定。反汇编程序事先不知道地址,因此无法告诉您调用哪种方法。
是的,您需要单独反汇编COM对象。
答案 1 :(得分:1)
取决于'a1'参数的值。由于可以使用不同的'a1'值调用此函数,因此仅通过查看列表就无法判断。您必须在调试器下运行它或检查调用者。