【发布时间】:2015-01-26 20:38:24
【问题描述】:
我正在尝试在kernel32 (see my problem here and the first answer I got) 中查找Windows API 的SetProcessDEPPolicy 函数的地址。
我以前从未编写过 Windows C++ 程序,所以我有点迷茫,但到目前为止我有这个:
#include <windows.h>
#include <iostream>
int main(int argc, char* argv[])
{
HANDLE kernel32 = GetModuleHandle("kernel32");
FARPROC* funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy");
std::cout << "@ ";
}
我在第 7 行收到以下错误:
C:\Documents and Settings\John\Desktop>c++ finddep.cpp -o finddep.exe finddep.cpp: In function 'int main(int, char**)': finddep.cpp:7:79: error: invalid conversion from 'HANDLE {aka void*}' to 'HINSTA NCE' [-fpermissive] FARPROC funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy") ;
^
In file included from c:\mingw\include\windows.h:50:0,
from finddep.cpp:1: c:\mingw\include\winbase.h:1675:27: error: initializing argument 1 of 'int (__ attribute__((__stdcall__)) * GetProcAddress(HINSTANCE, LPCSTR))()' [-fpermissive ] WINBASEAPI FARPROC WINAPI GetProcAddress(HINSTANCE,LPCSTR);
^ finddep.cpp:7:79: error: cannot convert 'int (__attribute__((__stdcall__)) **)() ' to 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' in initialization FARPROC funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy") ;
我找不到任何关于如何从 Google 解决此问题的好主意。
(一旦我得到这个编译,我怎样才能打印指针中的地址?)
编辑:从评论中添加了 Cyclone 的建议,得到相同的错误 Invalid conversion from HANDLE to HINSTANCE
【问题讨论】:
-
FARPROC* funcAddr = (FARPROC *) -
@Cyclone 感谢您指出这一点,但通过将其声明为指针会得到完全相同的错误。
Invalid conversaion from HANDLE to HINSTANCE -
该错误是由于将无效参数传递给
GetProcAddress()引起的,我相信。只是为了确保,一步调用该函数,然后在第二步将其转换为FARPROC*。请参阅msdn.microsoft.com/en-us/library/windows/desktop/… 的文档,该函数返回HMODULE,而不是HANDLE。 -
还检查
GetProcAddress()的返回类型并停止收听@Cyclone,只要他们建议盲目强制转换以使编译器静音。要与GetProcAddress()一起使用,您需要一个演员表,但我相信您应该能够使用reinterpret_cast。
标签: c++ windows kernel32 getprocaddress