Ric*_*dle 11 c c++ debugging winapi visual-studio
我正在调试一个C++ Win32应用程序,我想从该进程的上下文中调用一个任意的Win32 API,就好像该程序运行了这行代码:
DestroyWindow(0x00021c0e);
Run Code Online (Sandbox Code Playgroud)
但是进入立即窗口会进入:
CXX0017: Error: symbol "DestroyWindow" not found
Run Code Online (Sandbox Code Playgroud)
编辑:使用函数的全名{,,user32.dll}_NtUserDestroyWindow@4
,我可以使用立即窗口来了解我的意思,并显示函数的地址:
{,,user32.dll}_NtUserDestroyWindow@4
0x76600454 _NtUserDestroyWindow@4
Run Code Online (Sandbox Code Playgroud)
但当我试图调用它时,会发生这种情况:
{,,user32.dll}_NtUserDestroyWindow@4(0x00021c0e);
CXX0004: Error: syntax error
Run Code Online (Sandbox Code Playgroud)
甚至可以像这样从立即窗口调用C函数,还是我咆哮错误的树?
一旦你有了函数地址(正如你在更新的问题中所做的那样),你可以尝试将它转换为函数指针并调用它:
(*(BOOL (*)(HWND))0x76600454)((HWND)0x00021c0e)
Run Code Online (Sandbox Code Playgroud)
第一部分将地址转换为BOOL (*)(HWND)
,指向一个带HWND
参数并返回的函数的指针BOOL
.然后,取消引用并调用函数指针.确保参数正确,否则会发生不好的事情.在64位系统上,HWND
可能是64位,因此您可能无法通过将参数作为传递来逃脱int
.
编辑:查看完整故事的评论.
归档时间: |
|
查看次数: |
3226 次 |
最近记录: |