我正在调试一个 C++ Win32 应用程序,我想从该进程的上下文中调用任意 Win32 API,就好像该程序运行了这行代码一样:
DestroyWindow(0x00021c0e);
但是在立即窗口输入这个会得到:
CXX0017: Error: symbol "DestroyWindow" not found
编辑:通过使用函数的完整名称,{,,user32.dll}_NtUserDestroyWindow@4
,我可以让立即窗口理解我所指的函数并显示该函数的地址:
{,,user32.dll}_NtUserDestroyWindow@4
0x76600454 _NtUserDestroyWindow@4
但当我尝试调用它时,会发生这种情况:
{,,user32.dll}_NtUserDestroyWindow@4(0x00021c0e);
CXX0004: Error: syntax error
我能否像这样从即时窗口调用C函数,或者我走错了路?
CXX0004: Error: syntax error
。将 Windows 类型 (BOOL
和HWND
) 替换为原始类型 (int
在两种情况下) 可以改善情况,但是我接着得到CXX0014: Error: missing operand
。(顺便说一句,我在一个 32 位进程中。) - RichieHindletypedef BOOL (*DESTROYWINDOW)(HWND);
,然后在调试器中编写(*(DESTROYWINDOW)0x76600454)((void*)0x00021c0e)
。 - Adam Rosenfieldtypedef
添加到我的代码中,并在代码中实际使用typedef
,以便编译器不会丢弃定义,并在我使用typedef
的编译单元内中断进程的执行,现在我可以从立即窗口调用DestroyWindow。谢谢!虽然必须这样做有点麻烦,但至少是可行的。 - RichieHindle