C++ 找到进程中所加载的某一模块的基地址
2013-05-06 15:30
323 查看
MEMORY_BASIC_INFORMATION
typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
DWORD RegionSize;
DWORD State;
DWORD Protect;
DWORD Type; }
MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
这个结构体包含了进程虚拟地址空间中的一系列页面信息
VirtualQuery
用来查询调用进程的虚拟地址中的一段页面的信息
DWORD VirtualQuery( LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
DWORD dwLength );
第一个参数指向将要查询的页面区域的基地址
第二个参数是指向MEMORY_BASIC_INFORMATION结构体的指针,查询到的页面信息会被写入到这个结构体中。
第三个参数以字节的方式指明第二个参数的大小
整个实现方法:
typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
DWORD RegionSize;
DWORD State;
DWORD Protect;
DWORD Type; }
MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
这个结构体包含了进程虚拟地址空间中的一系列页面信息
VirtualQuery
用来查询调用进程的虚拟地址中的一段页面的信息
DWORD VirtualQuery( LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
DWORD dwLength );
第一个参数指向将要查询的页面区域的基地址
第二个参数是指向MEMORY_BASIC_INFORMATION结构体的指针,查询到的页面信息会被写入到这个结构体中。
第三个参数以字节的方式指明第二个参数的大小
整个实现方法:
HMODULE WINAPI ModuleFromAddress(PVOID pv) { MEMORY_BASIC_INFORMATION mbi; if (::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0) { return (HMODULE)mbi.AllocationBase; } else { return NULL; } }
相关文章推荐
- C++ 获取当前进程加载模块的完整路径读取配置文件
- PEB遍历进程加载模块
- Linux下C/C++查找某一进程
- 通过堆栈获取进程自身加载模块
- C++、python混合编程之加载模块
- Linux 下使用C++监测某一进程的状态
- GetModuleFileName获取当前进程已加载模块的文件的完整路径
- C++程序加载进程,源码
- 遍历创建进程、创建线程、加载模块的回调函数
- C#调用c++封装的dll文件提示未能加载正确的程序集XXX或其某一依赖项。。。
- C#调用C++ Build 写的DLL时,有时会出错,错误为无法加载 DLL "XXX.dll": 找不到指定的模块。(异常来自 HRESULT:0xXXXXXX)。。
- 枚举进程加载的所有的模块
- windbg下EPROCESS获取进程加载模块
- Linux下C/C++查找某一进程
- 通过PEB的Ldr枚举进程内所有已加载的模块
- x64windows安全机制进程_线程_模块加载回调摘要
- c++加载python模块,但是PyImport_ImportModule老返回NULL
- Windows一般都用系统进程来加载内核模块
- 加载内核模块,实现新的系统调用:遍历系统当前所有进程的任务描述符,并将pid组织成树状结构显示
- XP下的进程静音技术(遍历进程,遍历输入模块,遍历输入函数,找到函数并HOOK) good