windows 导出模块获取及dos内存结构剖析
2017-11-10 08:11
309 查看
include "stdafx.h" #include <iostream> #include <windows.h> #include <string.h> using namespace std; int main() { HMODULE hMod = ::GetModuleHandle(NULL); //获取dos头 IMAGE_DOS_HEADER *pDosHeader = (IMAGE_DOS_HEADER *)hMod; //获取选项头 IMAGE_OPTIONAL_HEADER *pOptHeader = (IMAGE_OPTIONAL_HEADER *)((BYTE *)hMod + pDosHeader->e_lfanew + 24); getchar(); //获取导入表基址 IMAGE_IMPORT_DESCRIPTOR *pImportDes = (IMAGE_IMPORT_DESCRIPTOR *)((BYTE *)hMod + pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); while (pImportDes->FirstThunk) { char *pszDllName = (char *)((BYTE*)hMod + pImportDes->Name); cout << "模块名:" << pszDllName << endl; IMAGE_THUNK_DATA *pThunk = (IMAGE_THUNK_DATA *)((BYTE *)hMod + pImportDes->OriginalFirstThunk); int n = 0; while (pThunk->u1.Function) { //获取导入函数名称 char *pFunName = (char*)((BYTE *)hMod + (DWORD)pThunk->u1.AddressOfData + 2); //获取导入函数地址 PDWORD lpAddr = (DWORD*)((BYTE *)hMod + pImportDes->FirstThunk) + n; //打印函h数名和函数表 printf("从此模块导入的函数:%-30s", pFunName); //printf("\t函数名称: %-10s", pFunName); printf("函数地址: %X\n", lpAddr); n++; pThunk++; } pImportDes++; } return 0; }
相关文章推荐
- Windows中进程的内存结构
- windows/vs如何获取程序内存使用量和时间花费
- windows进程中的内存结构(收藏)
- windows核心编程学习笔记(四)windows内存结构/虚拟内存/线程的堆栈
- windows进程中的内存结构
- 深入浅出的分析windows进程中的内存结构
- windows进程中的内存结构
- Redis 哈希结构内存模型剖析
- windows进程中的内存结构(转)
- 如何获取指定内存所在的模块、当前模块、当前函数的返回模块 - Yonsm.NET - SHARE YONSM'S IDEAS
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- windows进程中的内存结构
- Windowsw核心编程 第13章 Windows内存结构
- windows进程中的内存结构
- windows进程中的内存结构
- 第十三章:windows内存体系结构
- DOS可执行程序结构剖析[转载]
- Windows的内存结构
- windows进程中的内存结构
- 剖析Windows用1G内存还慢的原因