c++ - DLL注入(inject)后如何获取目标进程的基地址?

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

在我成功地将我的dll注入(inject)我的目标进程后,说“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 窗体(不确定它是否如此称呼)在我的界面中打印地址。

最佳答案

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

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

或者,下面的,完成同样的事情:

(DWORD)GetModuleHandleA("target.exe");

关于c++ - DLL注入(inject)后如何获取目标进程的基地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553966/

相关文章:

C++文件输入问题

c++ - 将 VAO+IBO 与 GLSL 着色器结合使用

c# - 如何使用 objectdatasource 将枚举绑定(bind)到 winform 组合框

winapi - 预注册 ATL 窗口类

c++ - 如何从主函数为对象数组赋值

c# - 在数据绑定(bind)时检索 datagridviewcombobox 后面的数据行

c# - 如何通过按 DeleteKey 删除 DataGridView 行?

类中的 C++ 线程

c++ - 运行 regsvr32.exe 时,带有线程句柄的 WaitForSingleObject 卡住

c++ - 从另一个结构中的函数返回结构的困难