1 Star 0 Fork 0

yunshouhu / libx

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Menory.h 6.35 KB
一键复制 编辑 原始数据 按行查看 历史
/********************************************************************
文件名: Menory.h
作 者: Mr. Wang site:http://www.sollyu.com/libx/
时 间: 2014-9-12 0:50
说 明: 内存处理相关
*********************************************************************/
#pragma once
namespace CLibX
{
namespace Memory{
//=========================================================================
// 函数名称: GetProcessID
// 函数说明:DWORD 获得进程的ProcessID,失败返回NULL
//=========================================================================
// 参 数: __in_opt LPCTSTR lpClassName 窗口类名
// 参 数: __in_opt LPCTSTR lpWindowName 窗口标题
//=========================================================================
DWORD GetProcessID(__in LPCTSTR lpClassName, __in LPCTSTR lpWindowName);
//------------------------------------------------------------------------------
// 函数命名: LibX::Process::GetProcessModuleAddr
// 返回类型: DWORD
//------------------------------------------------------------------------------
// 函数备注: 获得进程的入口基址。此获得的与CE的基址格式:Torchlight.exe+9A1D2C中Torchlight.exe的地址
//------------------------------------------------------------------------------
// 参数信息: __in const DWORD nProcessID 进程PID
//------------------------------------------------------------------------------
DWORD GetProcessModuleAddr( __in const DWORD nProcessID);
//=========================================================================
// 函数名称: ReadProcessMemory
// 函数说明: T 从内存中读取整数型数据,参数nFailue输入的类型为什么就返回什么类型的数据
//=========================================================================
// 参 数: __in const DWORD nProcessID 进程ID
// 参 数: __in const DWORD dwAddress 内存地址
// 参 数: __in const T nFailue 读内存失败后返回的内容
//=========================================================================
template <typename T> T ReadProcessMemory( __in const DWORD nProcessID,__in const DWORD dwAddress,__in const T nFailue )
{
T nRead;
HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,nProcessID);
int nResult = ::ReadProcessMemory(hHandle,(LPVOID)dwAddress,&nRead,sizeof(T),NULL);
CloseHandle(hHandle);
return nResult == 0 ? nFailue : nRead;
}
//=========================================================================
// 函数名称: ReadProcessMemory
// 函数说明: T 从内存中读取带有偏移的数据,参数nFailue输入的类型为什么就返回什么类型的数据
//=========================================================================
// 调用实例: float nRead = LibX::Memory::ReadProcessMemory(dwProcessId,0x01BD1D2C,0.0f,3,0x30c,0x18,0x3b8);
//=========================================================================
// 参 数: __in const DWORD nProcessID 进程ID
// 参 数: __in const DWORD dwAddress 内存地址
// 参 数: __in const T nFailue 读内存失败后返回的内容
// 参 数: __in int nOffset 偏移的个数
// 参 数: ... 偏移地址,从基址最近开始写
//=========================================================================
template <typename T> T ReadProcessMemory (__in const DWORD nProcessID,__in const DWORD dwAddress,__in const T nFailue,__in int nOffset, ...)
{
va_list arg_ptr;
va_start(arg_ptr,nOffset);
DWORD dwUpMemory = ReadProcessMemory(nProcessID,dwAddress,(DWORD)nFailue);
T nRead ;
for (int i=0; i<nOffset; i++)
{
long nOffsetOne = va_arg(arg_ptr,long);
if (i+1 == nOffset) nRead = ReadProcessMemory(nProcessID,dwUpMemory + nOffsetOne,nFailue);
else dwUpMemory = ReadProcessMemory(nProcessID,dwUpMemory + nOffsetOne,(DWORD)nFailue);
}
return nRead;
}
//=========================================================================
// 函数名称: WriteProcessMemory
// 函数说明: LONG_PTR 被写入内存字节数,写入内存字节数
//=========================================================================
// 参 数: __in const DWORD nProcessID 进程PID
// 参 数: __in DWORD lpBaseAddress 内存地址
// 参 数: __in LPVOID lpBuffer 要写入的数据。如整数:(LPVOID)100
// 参 数: __in int nSize 手动控制写入的字节数。不知道是多少可用sizeof
//=========================================================================
LONG WriteProcessMemory( __in const DWORD nProcessID, __in DWORD lpBaseAddress, __in LPVOID lpBuffer, __in int nSize = -1 );
//=========================================================================
// 函数名称: WriteProcessMemory
// 函数说明: LONG_PTR 往内存中写入带有偏移的数据,被成功写入内存字节数
//=========================================================================
// 参 数: __in const DWORD nProcessID 进程PID
// 参 数: __in DWORD lpBaseAddress 内存地址
// 参 数: __in LPVOID lpBuffer 要写入的数据。如整数:(LPVOID)100
// 参 数: __in int nSize 手动控制写入的字节数。不知道是多少可用sizeof
// 参 数: __in int nOffset 偏移的个数
// 参 数: ... 偏移地址,从基址最近开始写
//=========================================================================
LONG WriteProcessMemory( __in const DWORD nProcessID, __in DWORD lpBaseAddress, __in LPVOID lpBuffer, __in int nSize , __in int nOffset, ...);
//=========================================================================
// 函数名称: InjectDll
// 函数?明: BOOL 向目标进程中注入一个指定 Dll 模块文件.bool - 注入成功返回 true, 注入失败则返回 false.(采用远程线程注入技术实现)
//=========================================================================
// 参 数: __in DWORD dwProcessId 目标进程 ID
// 参 数: __in const LPCTSTR lpszLibName Dll 文件名及路径
//=========================================================================
BOOL InjectDll(__in DWORD dwProcessId,__in const LPCTSTR lpszLibName);
//=========================================================================
// 函数名称: UnInjectDll
// 函数?明: BOOL 从目标进程中卸载一个指定 Dll 模块文件.卸载成功返回 true, 卸载失败则返回 false.(采用远程线程注入技术实现)
//=========================================================================
// 参 数: __in DWORD dwProcessId 目标进程 ID
// 参 数: __in const LPCTSTR ptszDllFile Dll 文件名及路径
//=========================================================================
BOOL UnInjectDll(__in DWORD dwProcessId,__in const LPCTSTR ptszDllFile);
};
};
1
https://gitee.com/yunshouhu/libx.git
git@gitee.com:yunshouhu/libx.git
yunshouhu
libx
libx
master

搜索帮助