win32 API获取当前进程的基质
2017-06-30 22:05
1601 查看
我的另一个博客的地址:http://blog.sina.com.cn/s/blog_149e9d2ec0102wzhz.html
加载到进程地址空间的每一个可执行文件或者DLL文件都被赋予了一个独一无二的实例句柄。可执行文件的实例被作为(w)WinMain函数的第一个参数hInstanceExe传入。在需要加载资源的函数调用中,一般都要提供此句柄的值。
(w)WinMain的hInstance参数的实际值是一个内存基地址。系统将可执行文件的映像加载到进程地址空间中的这个位置。可执行文件的映像具体加载到哪一个基地址,是由连接器决定的。不同的连接器使用不同的默认基地址。由于历史的原因,VisualStudio连接器使用的默认基地址是0x00400000,当然还可以在VS中修改基地址的值。
下面是我们说的重点,如何通过程序获取应用程序或者DLL的基地址。
有三种方法:
1. 伪变量 __ImageBase;
2. GetModuleHandle函数
3. GetModuleHandleEx函数。
下面是使用的代码:
#include <windows.h>
#include <tchar.h>
extern "C" const IMAGE_DOS_HEADER __ImageBase;
void DumModule()
{
HMODULEhModule = GetModuleHandle(NULL);
_tprintf(TEXT("with GEtModuleHandle(NULL) = 0x%x\r\n"),hModule);
_tprintf(TEXT("with __ImageBase = 0x%x\r\n"),(HINSTANCE)&__ImageBase);
hModule =NULL;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(PCTSTR)DumModule,
&hModule);
_tprintf(TEXT("with GetModuleHandleEx = 0x%x\r\n"), hModule);
}
int _tmain()
{
DumModule();
return0;
}
加载到进程地址空间的每一个可执行文件或者DLL文件都被赋予了一个独一无二的实例句柄。可执行文件的实例被作为(w)WinMain函数的第一个参数hInstanceExe传入。在需要加载资源的函数调用中,一般都要提供此句柄的值。
(w)WinMain的hInstance参数的实际值是一个内存基地址。系统将可执行文件的映像加载到进程地址空间中的这个位置。可执行文件的映像具体加载到哪一个基地址,是由连接器决定的。不同的连接器使用不同的默认基地址。由于历史的原因,VisualStudio连接器使用的默认基地址是0x00400000,当然还可以在VS中修改基地址的值。
下面是我们说的重点,如何通过程序获取应用程序或者DLL的基地址。
有三种方法:
1. 伪变量 __ImageBase;
2. GetModuleHandle函数
3. GetModuleHandleEx函数。
下面是使用的代码:
#include <windows.h>
#include <tchar.h>
extern "C" const IMAGE_DOS_HEADER __ImageBase;
void DumModule()
{
HMODULEhModule = GetModuleHandle(NULL);
_tprintf(TEXT("with GEtModuleHandle(NULL) = 0x%x\r\n"),hModule);
_tprintf(TEXT("with __ImageBase = 0x%x\r\n"),(HINSTANCE)&__ImageBase);
hModule =NULL;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(PCTSTR)DumModule,
&hModule);
_tprintf(TEXT("with GetModuleHandleEx = 0x%x\r\n"), hModule);
}
int _tmain()
{
DumModule();
return0;
}
相关文章推荐
- 【API】获取当前进程的用户对象和GDI对象
- 【API】获取当前进程的内存信息
- 【API】获取当前进程的内存信息
- 【API】获取当前进程的线程数
- 【API】获取当前进程的用户对象和GDI对象
- 【API】获取当前进程的线程数。
- [Win32]获取当前输入焦点窗口所属进程的进程ID
- C#获取当前所有进程名
- 安全探讨之用Win32汇编写双进程守护(获取进程快照 枚举进程)
- 内核驱动程序中获取当前用户进程的进程名的一种方法
- 在C++中获取当前时间并转换为可读时间格式(Win32和Linux通用)
- C#获取当前进程HASH的方法
- API 获取当前登陆用户的名字和机器名
- 获取当前进程/线程的ID、句柄和内核地址
- 两个或多个进程之间通过Win32 API实现内存共享的方法(转)
- C++通过WIN32 API获取逻辑磁盘详细信息
- 获取当前进程描述符地址 -- current
- C++ 通过WIN32 API 获取逻辑磁盘详细信息
- Hook Win32 API 的应用研究之二:进程防杀
- Hook或者API高手请进-跨进程获取其他程序的DBGrid内容(其它人做的程序)