3

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

4

2 回答 2

1

您正在使用GetModuleHandle(ie GetModuleHandleW) 的宽版本,因此您必须向它传递一个有效的宽字符串。您的错误是您将非宽字符串转换为不起作用的宽字符串。请改用以下内容:

(DWORD)GetModuleHandleW(L"target.exe");

或者,以下,它完成了同样的事情:

(DWORD)GetModuleHandleA("target.exe");
于 2013-09-01T03:01:56.653 回答
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

于 2013-09-01T02:00:23.347 回答