c++ - 我可以从 Visual Studio 即时窗口调用 Win32 API 吗?

标签 c++ c visual-studio debugging winapi

我正在调试 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/

相关文章:

C++字符串类

c++ - 在 WinRT 组件中跨 ABI 边界编码 VARIANT

c++ - 跟踪输出,即使在调试时也无法弄清楚?

c - 如何将两个不等数组的每个元素相加并将其存储在第三个数组中?

c - 缓冲区溢出问题

c - 如何在不违反严格的别名规则的情况下合法地使用带 union 的类型双关语在 struct sockaddr 的变体之间进行转换?

c# - 在跟踪索引 C# 的同时快速排序数据数组

c++ - 使用 GDAL/OGR 库从二维地理引用栅格数据阵列重新投影栅格数据

visual-studio - [Broken] 在 CPU Usage 报告的 Function Name 列中表示什么?

c# - 如何更改 Visual Studio 中所有文件的版本