LoadPE之PE editor模拟

LoadPE之PE editor模拟

  1 void CPEInfoDlg::OnDropFiles(HDROP hDropInfo) 

  2 {

  3     // TODO: Add your message handler code here and/or call default

  4     TCHAR tzFileName[255]={0};

  5     int FileCount = DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);

  6     if (FileCount > 1)

  7     {

  8         MessageBox("暂时只支持分析一个文件,你传入了多个文件,将分析第一个","",0);

  9     }

 10 

 11     if (DragQueryFile(hDropInfo,0,tzFileName,sizeof(tzFileName)))

 12     {

 13         szFilePath = tzFileName;

 14     }

 15     DragFinish(hDropInfo);

 16     HANDLE hFile = ::CreateFile(szFilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

 17     if ( hFile == INVALID_HANDLE_VALUE)

 18     {

 19         AfxMessageBox("无效的文件");

 20         return;

 21     }

 22 

 23     IMAGE_DOS_HEADER dosHeader;

 24     IMAGE_NT_HEADERS32 ntHeader;

 25 

 26     BOOL bValid = FALSE;   //是不是PE文件

 27     DWORD dwReadLen;

 28     ::ReadFile(hFile,&dosHeader,sizeof(dosHeader),&dwReadLen,NULL);

 29     if (dwReadLen == sizeof(dosHeader))

 30     {

 31         if (dosHeader.e_magic == IMAGE_DOS_SIGNATURE)

 32         {

 33             if (::SetFilePointer(hFile,dosHeader.e_lfanew,NULL,FILE_BEGIN) != -1)

 34             {

 35                 ::ReadFile(hFile,&ntHeader,sizeof(ntHeader),&dwReadLen,NULL);

 36                 if (ntHeader.Signature == IMAGE_NT_SIGNATURE)

 37                 {

 38                     bValid = TRUE;  //一个合法的PE文件

 39                 }

 40             }

 41         }

 42     }

 43     if (bValid ==FALSE)

 44     {

 45         AfxMessageBox("你拖拽了一个非PE文件");

 46         return;

 47     }

 48     AfxGetMainWnd()->SetWindowText("[ PE editor ]"+szFilePath);

 49     CString szTemp = "";

 50     szTemp.Format("%08x",ntHeader.OptionalHeader.AddressOfEntryPoint);

 51     szTemp.MakeUpper();

 52     SetDlgItemText(IDC_EntryPoint,szTemp);

 53 

 54     szTemp.Format("%08x",ntHeader.OptionalHeader.ImageBase);

 55     szTemp.MakeUpper();

 56     SetDlgItemText(IDC_ImageBase,szTemp);

 57     szTemp.Format("%08x",ntHeader.OptionalHeader.SizeOfImage);

 58     szTemp.MakeUpper();

 59 

 60     SetDlgItemText(IDC_SizeOfImage,szTemp);

 61     szTemp.Format("%08x",ntHeader.OptionalHeader.BaseOfCode);

 62     szTemp.MakeUpper();

 63 

 64     SetDlgItemText(IDC_BaseOfCode,szTemp);

 65     szTemp.Format("%08x",ntHeader.OptionalHeader.BaseOfData);

 66     szTemp.MakeUpper();

 67 

 68     SetDlgItemText(IDC_BaseOfData,szTemp);

 69     szTemp.Format("%08x",ntHeader.OptionalHeader.SectionAlignment);

 70     szTemp.MakeUpper();

 71 

 72     SetDlgItemText(IDC_SectionAlignment,szTemp);

 73     szTemp.Format("%08x",ntHeader.OptionalHeader.FileAlignment);

 74     szTemp.MakeUpper();

 75 

 76     SetDlgItemText(IDC_FileAlignment,szTemp);

 77     szTemp.Format("%04x",ntHeader.OptionalHeader.Magic);

 78     szTemp.MakeUpper();

 79 

 80     SetDlgItemText(IDC_Magic,szTemp);

 81     szTemp.Format("%04x",ntHeader.OptionalHeader.Subsystem);

 82     szTemp.MakeUpper();

 83 

 84     SetDlgItemText(IDC_Subsystem,szTemp);

 85     szTemp.Format("%04x",ntHeader.FileHeader.NumberOfSections);

 86     szTemp.MakeUpper();

 87 

 88     SetDlgItemText(IDC_NumberOfSection,szTemp);

 89 

 90     szTemp.Format("%08x",ntHeader.FileHeader.TimeDateStamp);

 91     szTemp.MakeUpper();

 92 

 93     SetDlgItemText(IDC_TimeDataStamp,szTemp);

 94     szTemp.Format("%08x",ntHeader.OptionalHeader.SizeOfHeaders);

 95     szTemp.MakeUpper();

 96 

 97     SetDlgItemText(IDC_SizeOfHeader,szTemp);

 98     szTemp.Format("%04x",ntHeader.FileHeader.Characteristics);

 99     szTemp.MakeUpper();

100 

101     SetDlgItemText(IDC_Characteristics,szTemp);

102     szTemp.Format("%08x",ntHeader.OptionalHeader.CheckSum);

103     szTemp.MakeUpper();

104 

105     SetDlgItemText(IDC_CheckSum,szTemp);

106     szTemp.Format("%04x",ntHeader.FileHeader.SizeOfOptionalHeader);

107     szTemp.MakeUpper();

108 

109     SetDlgItemText(IDC_SizeOfOptionHeader,szTemp);

110     szTemp.Format("%08x",ntHeader.FileHeader.NumberOfSections);

111     szTemp.MakeUpper();

112 

113     SetDlgItemText(IDC_NumberOfSection,szTemp);

114     szTemp.Format("%08x",ntHeader.OptionalHeader.NumberOfRvaAndSizes);

115     szTemp.MakeUpper();

116 

117     SetDlgItemText(IDC_NumberOfRvaAndSize,szTemp);

118 

119     CDialog::OnDropFiles(hDropInfo);

120 }

直接读取文件,没有用到文件映射。

下次试试读取输入表和导出表。

你可能感兴趣的:(editor)