DLL注入后如何获取目标进程的基址?

时间:2013-09-01 00:05:32

标签: c++ winforms winapi memory-address dll-injection

我成功将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窗体(不确定它是否被称为)在我的界面中打印地址。

2 个答案:

答案 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