下面代码是通过进程ID来获取进程的基地址,创建一个进程快照后,读取进程模块,一般情况下第一个模块就是进程的基地址,下面的程序通过模块的字符串匹配来找到基地址。通过MODULEENTRY32来读取,下面是代码:
#include <Windows.h>
#include <Tlhelp32.h>
#include <stdio.h>
HMODULE fnGetProcessBase(DWORD PID);
DWORD GetLastErrorBox(HWND hWnd, LPSTR lpTitle) ;
int main()
{
HMODULE hModule = fnGetProcessBase(6520);
printf("%X",hModule);
return 0;
}
HMODULE fnGetProcessBase(DWORD PID)
{
//获取进程基址
HANDLE hSnapShot;
//通过CreateToolhelp32Snapshot和线程ID,获取进程快照
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
if (hSnapShot == INVALID_HANDLE_VALUE)
{
GetLastErrorBox(NULL,"无法创建快照");
return NULL;
}
MODULEENTRY32 ModuleEntry32;
ModuleEntry32.dwSize = sizeof(ModuleEntry32);
if (Module32First(hSnapShot, &ModuleEnt

本文介绍如何通过进程ID获取其基地址。程序通过创建进程快照,遍历模块,通常首个模块即为进程基地址。利用MODULEENTRY32结构体进行读取,通过模块名称匹配找到目标。
最低0.47元/天 解锁文章
3819

被折叠的 条评论
为什么被折叠?



