Win Tools

Win Tools

自学用WIN32做的一个遍历内存模块的小项目


```c
#include"PE.h"		

HINSTANCE hAppInstance;
LPSTR pata;						//存储文件路径
LPVOID pFileBuffer = NULL;		

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPrevInstance,
					 LPSTR     lpCmdLine,
					 int       nCmdShow)
{
	// TODO: Place code here.
	INITCOMMONCONTROLSEX icex;				
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX);				
	icex.dwICC = ICC_WIN95_CLASSES;				
	InitCommonControlsEx(&icex);				


	hAppInstance = hInstance;

	DialogBox(hAppInstance,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL,MainDlgProc);

	return 0;
}


判断进程是32还是64
//int GetProcessIsWOW64(HANDLE hProcess)
//{
//	int nRet=-1;
//
//	typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); 
//	LPFN_ISWOW64PROCESS fnIsWow64Process; 
//	BOOL bIsWow64 = FALSE; 
//	BOOL bRet;
//	DWORD nError;
//	fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(L"kernel32"),"IsWow64Process"); 
//	if (NULL != fnIsWow64Process) 
//	{ 
//		bRet=fnIsWow64Process(hProcess,&bIsWow64);
//		if (bRet==0)
//		{
//			nError=GetLastError();
//			nRet=-2;
//		}
//		else
//		{
//			if (bIsWow64)
//			{
//				nRet=1;
//			}
//			else
//			{
//				nRet=0;
//			}
//		}
//	} 
//	return nRet; 
//}
//创建另存为窗口

//主窗口的回调函数
BOOL CALLBACK MainDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	BOOL bRet = TRUE;				//遍历进程默认值
	HICON hIconSmall;				//大图标
	HICON hIconBig;					//小图标

	switch(uMsg)
	{
	case WM_CLOSE:
		{
			EndDialog(hDlg, 0);
			return TRUE;
		}
	case WM_INITDIALOG :
		hIconBig = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON2));
		hIconSmall = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON1));
		//设置图标
		SendMessage(hDlg,WM_SETICON,ICON_BIG,(DWORD)hIconBig);
		SendMessage(hDlg,WM_SETICON,ICON_SMALL,(DWORD)hIconSmall);	
		//开局提示
		MessageBox(hDlg, "仅供学习,切勿用于非法用途", "!", MB_OK);

		addlist1(hDlg);
		addlist2(hDlg);

		return TRUE;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDCANCEL_END:
			EndDialog(hDlg, 0);
			return TRUE;
		case IDCANCEL_PE:
			{
				OPENFILENAME OFN = { 0 };										//实例化结构体					
				char lj[1024] = { 0 };											//用来存储OPENFILENAME字符串路径
				HWND hListProcess;
				hListProcess = GetDlgItem(hDlg, IDCANCEL_PE);

				OFN.lStructSize = sizeof(OPENFILENAME);			//设置结构体大小

				OFN.hwndOwner = hListProcess;
				OFN.lpstrFilter = TEXT("*.exe;*.dll;*scr;*sys");
				OFN.lpstrCustomFilter = NULL;//TEXT("可执行文件.exe");
				OFN.lpstrFile = lj;
				OFN.nMaxFile = sizeof(lj) / sizeof(*lj);
				OFN.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;		//标志如果是多选要加上OFN_ALLOWMULTISELECT;

				BOOL bSel = GetOpenFileName(&OFN);

				pata = lj;
				MessageBox(0, lj, 0, 0);
				//PE信息查看的窗口
				INITCOMMONCONTROLSEX icex;				
				icex.dwSize = sizeof(INITCOMMONCONTROLSEX);				
				icex.dwICC = ICC_WIN95_CLASSES;				
				InitCommonControlsEx(&icex);

				DialogBox(hAppInstance,MAKEINTRESOURCE(IDD_DIALOG_PEMSG),hDlg,PEMSGDlgProc);

				return TRUE;
			}
		case IDCANCEL_GY:
			{
				MessageBox(hDlg,"仅供学习,切勿用于非法用途","!",MB_OK);
				return TRUE;
			}
		
		default:
			bRet = FALSE;
			break;
		}
		return TRUE;
	case WM_NOTIFY:
		{
			NMHDR* pNMHDR = (NMHDR*)lParam;
			switch (pNMHDR->code)
			{
			case NM_CLICK:
				{
					if (wParam == IDC_LIST_PROECSS && pNMHDR->code == NM_CLICK)
					{
						EnumModu(GetDlgItem(hDlg,IDC_LIST_HANDE),GetDlgItem(hDlg, IDC_LIST_PROECSS),wParam,lParam);
					}
				}
			default:
				break;
			}
			
			return TRUE;
		}
	default:
		bRet = FALSE;
		break;
	}
	return bRet;
}
//PE信息窗口的回调函数
BOOL CALLBACK PEMSGDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_INITDIALOG:
		{
			
			PIMAGE_DOS_HEADER dos = NULL;
			PIMAGE_NT_HEADERS nt = NULL;
			PIMAGE_FILE_HEADER pe = NULL;
			PIMAGE_OPTIONAL_HEADER ope = NULL;

			ButtonPE(&pFileBuffer);

			dos = (PIMAGE_DOS_HEADER)pFileBuffer;
			nt = (PIMAGE_NT_HEADERS)((DWORD)dos + dos->e_lfanew);
			pe = (PIMAGE_FILE_HEADER)((DWORD)nt + 4);
			ope = (PIMAGE_OPTIONAL_HEADER)((DWORD)pe + IMAGE_SIZEOF_FILE_HEADER);

			TCHAR szBuffer[50] = {0};
			//写入文本框里面PE信息 *还没有转16进制

			sprintf(szBuffer,"%x",ope->AddressOfEntryPoint);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),szBuffer);
			sprintf(szBuffer,"%x",ope->ImageBase);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT2),szBuffer);
			sprintf(szBuffer,"%x",ope->SizeOfImage);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT3),szBuffer);
			sprintf(szBuffer,"%x",ope->BaseOfCode);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT4),szBuffer);
			sprintf(szBuffer,"%x",ope->BaseOfData);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT5),szBuffer);
			sprintf(szBuffer,"%x",ope->SectionAlignment);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT6),szBuffer);
			sprintf(szBuffer,"%x",ope->FileAlignment);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT7),szBuffer);
			sprintf(szBuffer,"%x",ope->Magic);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT8),szBuffer);
			sprintf(szBuffer,"%x",ope->Subsystem);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT9),szBuffer);
			sprintf(szBuffer,"%x",pe->NumberOfSections);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT10),szBuffer);
			sprintf(szBuffer,"%x",pe->TimeDateStamp);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT11),szBuffer);
			sprintf(szBuffer,"%x",pe->SizeOfOptionalHeader);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT12),szBuffer);
			sprintf(szBuffer,"%x",pe->Characteristics);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT13),szBuffer);
			sprintf(szBuffer,"%x",ope->CheckSum);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT14),szBuffer);
			sprintf(szBuffer,"%x",(DWORD)&ope);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT15),szBuffer);
			sprintf(szBuffer,"%x",ope->NumberOfRvaAndSizes);
			SetWindowText(GetDlgItem(hDlg,IDC_EDIT16),szBuffer);

			return TRUE;
		}
	case WM_CLOSE:
		{
			EndDialog(hDlg,0);
			return TRUE;
		}
	case WM_COMMAND:
		{
			switch (LOWORD(wParam))
			{
				case IDC_BUTTON_CLOSE:
					{
						EndDialog(hDlg,0);
						return TRUE;
					}
				case IDC_BUTTON_SECTION:
					{
						DialogBox(hAppInstance,MAKEINTRESOURCE(IDD_DIALOG_JB),hDlg,JBProc);
						return TRUE;
					}
					case IDC_BUTTON_TABCON:
					{
						DialogBox(hAppInstance,MAKEINTRESOURCE(IDD_DIALOG_SECTMSG),hDlg,SECTMSG);
						return TRUE;
					}
			}
			return TRUE;
		}
	default:
		break;
	}
	return FALSE;
}
//节表窗口回调函数
BOOL CALLBACK JBProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_INITDIALOG:
		{
			ADDSection(hDlg);
			return TRUE;
		}
	case WM_CLOSE:
		{
			EndDialog(hDlg,0);
			return TRUE;
		}
	default:
		break;
	}
	return FALSE;
}
//资源目录窗口回调函数
BOOL CALLBACK SECTMSG(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CLOSE:
		{
			EndDialog(hDlg,0);
			return TRUE;
		}
	case WM_INITDIALOG:
		{
			Enumdirectory(hDlg,pFileBuffer);
			return TRUE;
		}
	case WM_COMMAND:
		{
			switch (LOWORD(wParam))
			{
			case IDC_BUTTON_DCB:
				{
					DialogBox(hAppInstance,MAKEINTRESOURCE(IDD_DIALOG_SJMLB),hDlg,SJMLB);
					return 0;
				}
			case IDC_BUTTON_DRB:
				{
					DialogBox(hAppInstance,MAKEINTRESOURCE(IDD_DIALOG_SJMLB),hDlg,SJMLB);
					return 0;
				}
			case IDC_BUTTON_CDW:
				{
					return 0;
				}
			default:
				break;
			}
		}
	default:
		break;
	}
	return FALSE;
}
//数据目录表窗口回调函数
BOOL CALLBACK SJMLB(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_INITDIALOG:
		{

			return 0;
		}
	case WM_CLOSE:
		{
			EndDialog(hDlg,0);
			return 0;
		}
	default:
		break;
	}
	return 0;
}
//遍历线程
BOOL addProecss(HWND hDlg)
{
	LV_ITEM vitem;
	int i = 0;						//进程遍历计数
	PROCESSENTRY32 pi;				//进程信息结构体


	//设置LV_ITEM的
	//初始化
	memset(&vitem,0,sizeof(LV_ITEM));
	vitem.mask = LVIF_TEXT;	

	//设置进程的
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0);	//创建快照
	if (INVALID_HANDLE_VALUE == hSnapshot)
	{
		return false;
	}
	//遍历进程的
	pi.dwSize = sizeof(PROCESSENTRY32);							//第一次使用必须初始化成员
	BOOL bRet = Process32First(hSnapshot,&pi);					//首次遍历

	while (bRet)
	{				
		vitem.pszText = pi.szExeFile;
		vitem.iItem = i;
		vitem.iSubItem = 0;
		ListView_InsertItem(hDlg, &vitem);
		//SendMessage(hDlg, LVM_INSERTITEM,0,(DWORD)&vitem);

		/*************************************************************************************************/

		/*************************************************************************************************/
		_itoa(pi.th32ProcessID,vitem.pszText,10);				//_itoa(要复制的整数,复制到那的指针(LPSTR),什么方式复制)
		vitem.iItem = i;
		vitem.iSubItem = 1;						
		ListView_SetItem(hDlg, &vitem);						

		vitem.iItem = i;						
		vitem.iSubItem = 2;						
		ListView_SetItem(hDlg, &vitem);						

		vitem.iItem = i;						
		vitem.iSubItem = 3;						
		ListView_SetItem(hDlg, &vitem);						
		i++;
		bRet = Process32Next(hSnapshot,&pi);				//下一次遍历进程
	}
	return false;
}
//listview 线程添加
void addlist1(HWND hDlg)
{
	LV_COLUMN lv;							
	HWND hListProcess;							

	//初始化							
	memset(&lv,0,sizeof(LV_COLUMN));							
	//获取IDC_LIST_PROCESS句柄							
	hListProcess = GetDlgItem(hDlg,IDC_LIST_PROECSS);							
	//设置整行选中							
	SendMessage(hListProcess,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT);							

	//第一列							
	lv.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;							
	lv.pszText = TEXT("进程");				//列标题			
	lv.cx = 100;							
	lv.iSubItem = 0;							
	//ListView_InsertColumn(hListProcess, 0, &lv);							
	SendMessage(hListProcess,LVM_INSERTCOLUMN,0,(DWORD)&lv);							
	//第二列							
	lv.pszText = TEXT("PID");							
	lv.cx = 100;							
	lv.iSubItem = 1;							
	//ListView_InsertColumn(hListProcess, 1, &lv);							
	SendMessage(hListProcess,LVM_INSERTCOLUMN,1,(DWORD)&lv);							
	//第三列							
	lv.pszText = TEXT("镜像基址");							
	lv.cx = 100;							
	lv.iSubItem = 2;							
	ListView_InsertColumn(hListProcess, 2, &lv);							
	//第四列							
	lv.pszText = TEXT("镜像大小");							
	lv.cx = 100;							
	lv.iSubItem = 3;							
	ListView_InsertColumn(hListProcess, 3, &lv);							

	addProecss(hListProcess);
}
//遍历模块
BOOL EnumModu(HWND hListModu,HWND hListProecss, WPARAM wParam, LPARAM lParam)
{
	int i = 0;										//遍历次数
	LV_ITEM vitem = { 0 };							//行信息结构体
	MODULEENTRY32 modu = { 0 };						//模块信息结构体
	DWORD dwIndex = 0;
	TCHAR szpId[0x20] = {0};

	modu.dwSize = sizeof(MODULEENTRY32);
	//&mn
	//清除之前list view里面的行

	memset(&vitem, 0, sizeof(LV_ITEM));
	vitem.mask = LVIF_TEXT;

	dwIndex = SendMessage(hListProecss,LVM_GETNEXTITEM,-1,LVNI_SELECTED);			//得到鼠标选择的索引
	SendMessage(hListModu, LVM_DELETEALLITEMS, 0, 0);							//清除上一次遍历之后剩余的东西

	//获取pid
	vitem.iSubItem = 1;
	vitem.pszText = szpId;
	vitem.cchTextMax = 0x20;
	SendMessage(hListProecss,LVM_GETITEMTEXT,dwIndex,(LPARAM)&vitem);			//根据dwIndex的索引找到vitem里面描述的东西
	sscanf(szpId,"%d",&dwIndex);

	
	HANDLE hTool = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32 | TH32CS_SNAPPROCESS,dwIndex);
	DWORD a = GetLastError();
	if (INVALID_HANDLE_VALUE == hTool)
	{
		MessageBox(NULL,"创建快照失败!","!",MB_OK);
		return FALSE;
	}
	BOOL bRet = Module32First(hTool,&modu);
	while (bRet)
	{
		vitem.pszText = modu.szModule;
		vitem.iItem = i;
		vitem.iSubItem = 0;
		//ListView_InsertItem(hListProcess, &vitem);				
		SendMessage(hListModu, LVM_INSERTITEM, 0, (DWORD)&vitem);

		vitem.pszText = modu.szExePath;
		vitem.iItem = i;
		vitem.iSubItem = 1;
		ListView_SetItem(hListModu, &vitem);

		_itoa((DWORD)modu.modBaseAddr, vitem.pszText, 16);
		vitem.iItem = i;
		vitem.iSubItem = 2;
		ListView_SetItem(hListModu, &vitem);

		_itoa(modu.modBaseSize, vitem.pszText, 16);
		vitem.iItem = i;
		vitem.iSubItem = 3;
		ListView_SetItem(hListModu, &vitem);

		i++;
		bRet = Module32Next(hTool, &modu);
	}
	i = 0;
	return TRUE;
}
//listview模块 添加
void addlist2(HWND hDlg)
{
	LV_COLUMN lv;
	HWND hListProcess;

	//初始化							
	memset(&lv, 0, sizeof(LV_COLUMN));
	//获取IDC_LIST_PROCESS句柄							
	hListProcess = GetDlgItem(hDlg, IDC_LIST_HANDE);
	//设置整行选中							
	SendMessage(hListProcess, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);

	//第一列							
	lv.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
	lv.pszText = TEXT("模块名称");				//列标题			
	lv.cx = 200;
	lv.iSubItem = 0;
	//ListView_InsertColumn(hListProcess, 0, &lv);							
	SendMessage(hListProcess, LVM_INSERTCOLUMN, 0, (DWORD)&lv);
	//第二列							
	lv.pszText = TEXT("模块位置");
	lv.cx = 100;
	lv.iSubItem = 1;
	//ListView_InsertColumn(hListProcess, 1, &lv);							
	SendMessage(hListProcess, LVM_INSERTCOLUMN, 1, (DWORD)&lv);

}
//节表listview添加列
void ADDSection (HWND hDlg )
{
	LV_COLUMN lv;							
	HWND hListProcess;							

	//初始化							
	memset(&lv,0,sizeof(LV_COLUMN));							
	//获取IDC_LIST_PROCESS句柄							
	hListProcess = GetDlgItem(hDlg,IDC_LIST_SECRION);							
	//设置整行选中							
	SendMessage(hListProcess,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT);							

	//第一列							
	lv.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;							
	lv.pszText = TEXT("节名");				//列标题			
	lv.cx = 100;							
	lv.iSubItem = 0;							
	//ListView_InsertColumn(hListProcess, 0, &lv);							
	SendMessage(hListProcess,LVM_INSERTCOLUMN,0,(DWORD)&lv);							
	//第二列							
	lv.pszText = TEXT("文件偏移");							
	lv.cx = 100;							
	lv.iSubItem = 1;							
	//ListView_InsertColumn(hListProcess, 1, &lv);							
	SendMessage(hListProcess,LVM_INSERTCOLUMN,1,(DWORD)&lv);							
	//第三列							
	lv.pszText = TEXT("文件大小");							
	lv.cx = 100;							
	lv.iSubItem = 2;							
	ListView_InsertColumn(hListProcess, 2, &lv);							
	//第四列							
	lv.pszText = TEXT("内存偏移");							
	lv.cx = 100;							
	lv.iSubItem = 3;							
	ListView_InsertColumn(hListProcess, 3, &lv);	
	//第五列							
	lv.pszText = TEXT("内存大小");							
	lv.cx = 100;							
	lv.iSubItem = 4;							
	ListView_InsertColumn(hListProcess, 4, &lv);	
	//第六列							
	lv.pszText = TEXT("节区属性");							
	lv.cx = 100;							
	lv.iSubItem = 5;							
	ListView_InsertColumn(hListProcess, 5, &lv);
	Addjbhang(hListProcess);
}
//节表listview添加行
void Addjbhang (HWND hListProcess)
{
	LV_ITEM vitem;
	PIMAGE_DOS_HEADER dos = NULL;
	PIMAGE_NT_HEADERS nt = NULL;
	PIMAGE_FILE_HEADER pe = NULL;
	PIMAGE_OPTIONAL_HEADER ope = NULL;
	PIMAGE_SECTION_HEADER jb = NULL;


	//初始化
	memset(&vitem,0,sizeof(LV_ITEM));
	vitem.mask = LVIF_TEXT;	
	dos = (PIMAGE_DOS_HEADER)pFileBuffer;
	nt = (PIMAGE_NT_HEADERS)((DWORD)dos + dos->e_lfanew);
	pe = (PIMAGE_FILE_HEADER)((DWORD)nt + 4);
	ope = (PIMAGE_OPTIONAL_HEADER)((DWORD)pe + IMAGE_SIZEOF_FILE_HEADER);
	jb = (PIMAGE_SECTION_HEADER)((DWORD)ope + pe->SizeOfOptionalHeader);
			
	for (int i = 0; i < pe->NumberOfSections; i++)
	{
		vitem.pszText = (LPSTR)jb[i].Name;
		vitem.iItem = i;
		vitem.iSubItem = 0;
		ListView_InsertItem(hListProcess, &vitem);
		
		_itoa(jb[i].PointerToRawData,vitem.pszText,16);				//_itoa(要复制的整数,复制到那的指针(LPSTR),什么方式复制)
		vitem.iItem = i;
		vitem.iSubItem = 1;						
		ListView_SetItem(hListProcess, &vitem);	

		_itoa(jb[i].SizeOfRawData,vitem.pszText,16);
		vitem.iItem = i;						
		vitem.iSubItem = 2;						
		ListView_SetItem(hListProcess, &vitem);		

		_itoa(jb[i].VirtualAddress,vitem.pszText,16);
		vitem.iItem = i;						
		vitem.iSubItem = 3;						
		ListView_SetItem(hListProcess, &vitem);		

		_itoa(jb[i].Misc.VirtualSize,vitem.pszText,16);
		vitem.iItem = i;						
		vitem.iSubItem = 4;						
		ListView_SetItem(hListProcess, &vitem);	

		_itoa(jb[i].Characteristics,vitem.pszText,2);
		vitem.iItem = i;						
		vitem.iSubItem = 5;						
		ListView_SetItem(hListProcess, &vitem);	
	}
}
//读取文件
void ButtonPE(LPVOID* pFileBuffer)
{
	FILE* pFile = NULL;
	LPVOID pBuffer = NULL;
	DWORD f_size = 0;
	
	pFile = fopen(pata,"rb");
	if (pFile == NULL)
	{
		MessageBox(0,"打开失败!","!",0);
		return ;
	}
	fseek(pFile,0,SEEK_END);
	f_size = ftell(pFile);
	fseek(pFile,0,SEEK_SET);

	pBuffer = malloc(f_size);
	if (!pBuffer)
	{
		MessageBox(0,"分配失败!","!",0);
		fclose(pFile);
		return ;
	}
	size_t n = fread(pBuffer,f_size,1,pFile);
	if (!n)
	{
		MessageBox(0,"读取失败!","!",0);
		free(pBuffer);
		fclose(pFile);
		return ;
	}
	*pFileBuffer = pBuffer;
	return ;
}
//遍历数据目录项地址还有大小
//
void Enumdirectory(HWND hDlg,LPVOID pFileBuffer)
{
	LPVOID pFile = NULL;
	TCHAR szBuffer[50] = {0};							//数据转字符串缓冲区
	PIMAGE_DOS_HEADER dos = NULL;
	PIMAGE_NT_HEADERS nt = NULL;
	PIMAGE_FILE_HEADER pe = NULL;
	PIMAGE_OPTIONAL_HEADER ope = NULL;
	PIMAGE_DATA_DIRECTORY sjml = NULL;

	pFile = pFileBuffer;
	if (*(PWORD)pFile != IMAGE_DOS_SIGNATURE)
	{
		MessageBox(hDlg,"不是有效的PE文件!","!",MB_OK);
		return;
	}
	dos = (PIMAGE_DOS_HEADER)pFile;
	nt = (PIMAGE_NT_HEADERS)((DWORD)dos + dos->e_lfanew);
	pe = (PIMAGE_FILE_HEADER)((DWORD)nt + 4);
	ope = (PIMAGE_OPTIONAL_HEADER)((DWORD)pe + IMAGE_SIZEOF_FILE_HEADER);
	sjml = (PIMAGE_DATA_DIRECTORY)ope->DataDirectory;

	HWND EDIT1[14] = {0};
	HWND EDIT2[14] = {0};
	EDIT1[0] = GetDlgItem(hDlg,IDC_EDIT1);
	EDIT1[1] = GetDlgItem(hDlg,IDC_EDIT2);
	EDIT1[2] = GetDlgItem(hDlg,IDC_EDIT3);
	EDIT1[3] = GetDlgItem(hDlg,IDC_EDIT4);
	EDIT1[4] = GetDlgItem(hDlg,IDC_EDIT5);
	EDIT1[5] = GetDlgItem(hDlg,IDC_EDIT6);
	EDIT1[6] = GetDlgItem(hDlg,IDC_EDIT7);
	EDIT1[7] = GetDlgItem(hDlg,IDC_EDIT8);
	EDIT1[8] = GetDlgItem(hDlg,IDC_EDIT9);
	EDIT1[9] = GetDlgItem(hDlg,IDC_EDIT10);
	EDIT1[10] = GetDlgItem(hDlg,IDC_EDIT11);
	EDIT1[11] = GetDlgItem(hDlg,IDC_EDIT12);
	EDIT1[12] = GetDlgItem(hDlg,IDC_EDIT13);
	EDIT1[13] = GetDlgItem(hDlg,IDC_EDIT14);
	EDIT2[0] = GetDlgItem(hDlg,IDC_EDIT15);
	EDIT2[1] = GetDlgItem(hDlg,IDC_EDIT16);
	EDIT2[2] = GetDlgItem(hDlg,IDC_EDIT17);
	EDIT2[3] = GetDlgItem(hDlg,IDC_EDIT18);
	EDIT2[4] = GetDlgItem(hDlg,IDC_EDIT19);
	EDIT2[5] = GetDlgItem(hDlg,IDC_EDIT20);
	EDIT2[6] = GetDlgItem(hDlg,IDC_EDIT21);
	EDIT2[7] = GetDlgItem(hDlg,IDC_EDIT22);
	EDIT2[8] = GetDlgItem(hDlg,IDC_EDIT23);
	EDIT2[9] = GetDlgItem(hDlg,IDC_EDIT24);
	EDIT2[10] = GetDlgItem(hDlg,IDC_EDIT25);
	EDIT2[11] = GetDlgItem(hDlg,IDC_EDIT26);
	EDIT2[12] = GetDlgItem(hDlg,IDC_EDIT27);
	EDIT2[13] = GetDlgItem(hDlg,IDC_EDIT28);
	for (int i = 0; i < 14; i++)
	{
		sprintf(szBuffer,"%x",sjml[i].VirtualAddress);
		SetWindowText(EDIT1[i],szBuffer);
		sprintf(szBuffer,"%x",sjml[i].Size);
		SetWindowText(EDIT2[i],szBuffer);
	}
	return ;
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值