下面代码是通过进程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, &ModuleEntry32))
{
do
{
TCHAR szExt[5];
strcpy(szExt, ModuleEntry32.szExePath + strlen(ModuleEntry32.szExePath) - 4);
for (int i = 0;i < 4;i++)
{
if ((szExt[i] >= 'a')&&(szExt[i] <= 'z'))
{
szExt[i] = szExt[i] - 0x20;
}
}
if (!strcmp(szExt, ".EXE"))
{
CloseHandle(hSnapShot);
return ModuleEntry32.hModule;
}
} while (Module32Next(hSnapShot, &ModuleEntry32));
}
CloseHandle(hSnapShot);
return NULL;
}
// 显示错误信息
DWORD GetLastErrorBox(HWND hWnd, LPSTR lpTitle)
{
LPVOID lpv;
DWORD dwRv;
if (GetLastError() == 0) return 0;
dwRv = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
(LPSTR)&lpv,
0,
NULL);
MessageBox(hWnd, (LPCSTR)lpv, lpTitle, MB_OK);
if(dwRv)
LocalFree(lpv);
SetLastError(0);
return dwRv;
}
分享到:
相关推荐
一键获取CSGO的基地址啊啊啊啊啊啊啊啊啊
对外发布基地址查找实录简版.part2.rar 对外发布基地址查找实录简版.part2.rar对外发布基地址查找实录简版.part2.rar对外发布基地址查找实录简版.part2.rar对外发布基地址查找实录简版.part2.rar
Delphi 获取Windows正在运行的进程列表,点击右侧按钮,即可获取到进程项,包括下列各进程的参数,获取到的内容会显示详细信息,包括路径、exe可执行文件名称等: Listbox2.Items.add('模块名称:' ModuleArray[i]....
研华的 ISA 板卡采用跳线来设置 ISA 的基地址。地址线 A9~A0 中,一般情况的A0~A2 参与卡上上的 I/O 译码,而 A8~A3 参与基地址的选择。...这样用户通过范围和基地址选择跳线来配合完成基地址的设置。
根据输出表RVA和基址取输出表的FAT,FNT 再然后就是暴力男人狂搜FNT说指向的API名称,并和我们想要的API名称进行对比,找到后返回FAT找其地址
扩展样式,进程句柄,线程ID,消息循环地址;父亲句柄,该窗口程序实例;帮助场景。2 进程:优先级 父亲进程ID 线程个数 路径;3 模块:模块名,模块ID 模块大小 引用记数;总引用记数 模块路径 基地址 进入口。3 ...
本工具通过读取进程PEB数据遍历进程所加载的模块信息,包括模块名,模块路径,模块基地址等信息,支持64位和32位进程。
DLL内存补丁,可查找进程中的dll模块,对dll模块的基地址相对偏移处修改内存,相比流行的进程内存补丁更进了一步,DLL memory patch can be find in the process of dll module, dll modules of relatively offset ...
本设计主要介绍AXILite的设计开发,通过一个主机Master读写控制两个从机Slaver(通过基地址进行寄存器地址偏移),从而实现外设寄存器的控制。包括:IP的生成、各通道的信号讲解,以及基地址的使用。 包括三种设计...
参数 进程ID, 整数型, 可空, 可空,默认取消自身,可用的进程_名取ID()获取进程ID, .子程序 关闭防各类调试, 逻辑型, 公开, 取消结束并保护程序 .参数 进程ID, 整数型, 可空, 可空,默认取消自身,可用的进程_名取ID()...
Delphi 列举当前系统所有进行以及每个进程的模块信息,文件路径,模块大小、模块句柄、模块基地址、进程ID等等。
LabVIEW获取计算机的CPU和硬盘ID,方便LLicense生成。 ,经测试可直接使用。
炎黄传说基础地址查询器 本程序遍历游戏内存,通过特征码查询游戏基地址。 主要演示机器码与call addr的转换。包括:call 0x12345和mov eax, 0x12345
看了许多资料都没有讲如何配置DMA通道外设基地址 ADC 规则数据寄存器(ADC_DR)的地址偏移:4Ch #define ADC1_DR_Address ((u32)0x4001244C) 就是ADC1的外设基地址(0x4001 2400)加上ADC数据寄存器(ADC_DR)的...
进程虚拟内存查看器是一个可以查看任何进程地址空间信息的工具,其中包括: 1、系统全局的内存状态 总页面大小 可用页面大小等等..... 2、指定进程的工作集查看 3、指定进程的虚拟内存页面的详细分布表 包括所有...
虚拟内存我们经常会听见这个词语,那么我们要怎么查看呢?... 2、指定进程的工作集查看 3、指定进程的虚拟内存页面的详细分布表,包括所有页面的基地址、大小、页面属性等等 4、指定进程的虚拟内存分布图 5、指
Asp .Net Core项目中,以服务基地址为标识的HttpClient池管理模块
使用信号量及P、V操作实现子进程之间通过共享内存通信的读写同步,如实验图5-1所示。要求如下: 生产者进程消费者进程A消费者进程B父进程sum 生产者进程 消费者进程A 消费者进程B 父进程 sum 实验图 5-1 请参考附件...
该工具用于查看其它进程加载的模块信息的,可以查看模块的对应的文件,基地址,模块入口点,及进程名命令行参数。支持查看32位进程内和64位进程。
利用管道进行进程间的通信,运用windows API函数建立父进程和子进程通过本地qq进行通信