本帖最后由 博弟弟丶 于 2021-10-1 05:54 编辑
[C++] 纯文本查看 复制代码
#include <windows.h>
#include <TlHelp32.h>//获取模块头文件
uintptr_t GetModuleBaseAddress(DWORD procId, const wchar_t* modName)//定义一个函数 方便调用
{
uintptr_t modBaseAddr = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);//[color=#333333][font="]可以获取系统中正在运行的进程信息,线程信息 一系列东西[/font][/color]
if (hSnap != INVALID_HANDLE_VALUE),
{
MODULEENTRY32 modEntry; //初始化 结构体
modEntry.dwSize = sizeof(modEntry);// 这句话就是说 取这个结构体的大小 用sizeof(modentry)
if (Module32First(hSnap, &modEntry))//[color=#333333][font="]此函数检索与进程相关联的第一个模块的信息[/font][/color]
{
do
{
if (!_wcsicmp(modEntry.szModule, modName))//比较大小
{
modBaseAddr = (uintptr_t)modEntry.modBaseAddr;
break;
}
} while (Module32Next(hSnap, &modEntry));
}
}
CloseHandle(hSnap);//关闭
return modBaseAddr;
int main(){
调用这个函数就行了 第一个进程ID 第二个 可以是模块(列如.exe+460这种 exe这种就属于本地的) 可以是DLL(列如.DLL+460这种 DLL这种就属于服务器的) 有哪里不对的地方 还望指教 如果实在不明白 可以下断点 一步一步过 这样肯定会明白
return 0;
}
|