我成功将dll注入目标进程后,说“target.exe”,如何获取“target.exe”的基址?
我已经尝试了GetModuleHandle(0)和GetModuleHandle(“target.exe”),但它似乎不对,我不知道如何调试。我试着像这样打印:
//retrive target's base address
DWORD EXEBaseAddr = (DWORD) GetModuleHandle((LPCWSTR)"target.exe");
std::stringstream sstr;
sstr << EXEBaseAddr;
std::string str = sstr.str();
String^ str3 = gcnew String(str.c_str());
baseAddressLBL->Text = str3;
我不得不再次将它强制转换,因为我正在使用Windows窗体(不确定它是否被称为)在我的界面中打印地址。
答案 0 :(得分:1)
您正在使用GetModuleHandle
的宽版本(即GetModuleHandleW
),因此您必须将其传递给有效的宽字符串。您的错误在于您将非宽字符串转换为宽字符串,这将无效。请改用以下内容:
(DWORD)GetModuleHandleW(L"target.exe");
或者,以下,完成相同的事情:
(DWORD)GetModuleHandleA("target.exe");
答案 1 :(得分:0)
GetModuleHandle(NULL);
确实得到当前正在运行的进程的id;)所以如果你的代码在target.exe进程内部运行,你应该使用该API调用检索进程ID,你确定你能够成功地注入dll并跳转调用你的代码?
如果您确定您的代码正常工作,您可以尝试使用GetCurrentProcessId();
函数检索调用进程的id :)在MSDN上更多关于它的信息
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683180(v=vs.85).aspx