zoukankan      html  css  js  c++  java
  • 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 }

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

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

  • 相关阅读:
    vue教程2-06 过滤器
    vue教程2-05 v-for循环 重复数据无法添加问题 加track-by='索引'
    vue教程2-04 vue实例简单方法
    Linux文件I/O
    Linux内存管理
    进程中内存地址空间的划分
    Ubuntu12.04 15.04禁止移动介质自动播放
    条件编译,头文件,静态库,共享库与多文件编程
    C语言的函数
    C语言流程控制
  • 原文地址:https://www.cnblogs.com/tk091/p/2748886.html
Copyright © 2011-2022 走看看