我正在调试 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 函数,还是我找错树了?
最佳答案
获得函数地址后(正如您在更新的问题中所做的那样),您可以尝试将其转换为函数指针并调用它:
(*(BOOL (*)(HWND))0x76600454)((HWND)0x00021c0e)
它的第一部分将地址转换为 BOOL (*)(HWND)
,它是一个指向接受 HWND
参数并返回 的函数的指针 bool
。然后,函数指针被解除引用并被调用。确保参数正确,否则会发生不好的事情。在 64 位系统上,HWND
可能是 64 位,因此您可能无法将参数作为 int
传递。
编辑:查看完整故事的评论。
关于c++ - 我可以从 Visual Studio 即时窗口调用 Win32 API 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312056/