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 ;
}