获得PE文件的导入模块和导入函数
2009-03-17 12:14
555 查看
#include "windows.h" #include "iostream.h" #include "Dbghelp.h" #include "Psapi.h" #pragma comment(lib,"Psapi.lib") #pragma comment(lib,"Dbghelp.lib") #define SizeOfArray 32//枚举模块的数组大小 HMODULE hModuleArray[SizeOfArray]={0};//定义了枚举模块数组 DWORD dwNeed; main() { ULONG size; if(!EnumProcessModules(GetCurrentProcess(),hModuleArray,SizeOfArray,&dwNeed)) {cout<<"fail to enum modules"<<endl; return;} int i=0;//上一句为枚举当前进程中的模块 while(hModuleArray[i]) { PIMAGE_IMPORT_DESCRIPTOR pImport=(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData((HINSTANCE)hModuleArray[i],true,IMAGE_DIRECTORY_ENTRY_IMPORT,&size); //上一句为获得导入表 if (pImport==NULL) {cout<<endl;break;} while (pImport->Name)//根据导入表来循环得到导入模块和导入函数 { cout<<"模块名称:"<<(PSTR)((PBYTE)hModuleArray[i]+pImport->Name)<<endl; PIMAGE_THUNK_DATA pThunk =(PIMAGE_THUNK_DATA) ((PBYTE)hModuleArray[i]+pImport->OriginalFirstThunk);//IAT //在一个模块下获得第一个Thunk if (pThunk==NULL) break; while(pThunk->u1.Function) { cout<<" 导入函数:"<<(LPSTR)((PBYTE)hModuleArray[i]+(DWORD)pThunk->u1.AddressOfData+2)<<endl;//前两个为导入符号。导入函数的名称在之后所以加上2 pThunk++; } pImport++; } i++; } system("pause");//暂停 }
相关文章推荐
- Python定义函数,模块导入以及Python主程序文件结构
- windows PE Image 文件分析(4)--- 导入函数的绑定
- Python定义函数,模块导入以及Python主程序文件结构
- Depends.exe —— PE依赖模块、导入导出函数查询
- PE 文件编外篇之导入函数表
- C语言编程获取PE文件导入函数
- 使用汇编取得PE文件导入的DLL名称和函数名称
- 利用PE数据目录的导入表获取函数名及其地址
- PE文件结构详解(四)PE导入表
- PE文件的基本结构-4 导入表
- os模块中关于文件/目录常用的函数使用方法
- 配置文件,dll导入到工程中,并使用该模块
- 获得文件属性的函数调用实例
- 通过config文件配置动态导入模块
- Matlab(1)-导入MIT-BIH心电头文件(.hea)所用函数
- 【C#进阶系列】02 PE文件,程序集,托管模块,元数据——还是那个Hello world
- 【SQLServer2008】之如何导入mdf,ldf文件、导入.mdf文件报错解决问题以及如何获得Authenticated Users 权限
- Python 函数、文件与模块
- JIURL PE 格式学习总结(三)-- PE文件中的输入函数
- Python 中 一个模块文件导入操作:import 和 from ,以及reload调用