源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C++判断pe文件实例

  • 时间:2021-08-31 16:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++判断pe文件实例
本文实例讲述了C++判断pe文件的方法。分享给大家供大家参考。 具体实现方法如下: #include <afxdlgs.h>是为了使用CFileDialog main.h如下:
[u]复制代码[/u] 代码如下:
#include <afxwin.h>    class CMyApp:public CWinApp  {      BOOL InitInstance();  };
main.cpp如下:
[u]复制代码[/u] 代码如下:
#include "main.h"  #include <afxdlgs.h>    CMyApp theApp;    BOOL CMyApp::InitInstance()  {      CFileDialog dlg(TRUE);      if (dlg.DoModal() != IDOK)      {          return FALSE;      }      //打开文件      HANDLE hFile = ::CreateFile(dlg.GetPathName(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);      if (INVALID_HANDLE_VALUE == hFile)      {          return FALSE;      }      IMAGE_DOS_HEADER dosHeader;      IMAGE_NT_HEADERS32 ntHeader;      DWORD dwReturn;      BOOL bIsPe=FALSE;      ::ReadFile(hFile, &dosHeader, sizeof(IMAGE_DOS_HEADER), &dwReturn, NULL);      if (dwReturn == sizeof(IMAGE_DOS_HEADER))      {          if (dosHeader.e_magic == IMAGE_DOS_SIGNATURE) //mz          {              if (-1 != ::SetFilePointer(hFile, dosHeader.e_lfanew, NULL, FILE_BEGIN))              {                  ::ReadFile(hFile, &ntHeader, sizeof(IMAGE_NT_HEADERS32), &dwReturn, NULL);                  if (dwReturn == sizeof(IMAGE_NT_HEADERS32))                  {                      if (ntHeader.Signature == IMAGE_NT_SIGNATURE) //pe                      {                          bIsPe = TRUE;                      }                  }              }          }      }      ::CloseHandle(hFile); //与上面的CreateFile区对写      if (bIsPe)      {          MessageBoxA(NULL, "is a pe file", "", MB_OK);      }      else      {          MessageBoxA(NULL, "not a pe file", "", MB_OK);      }      return FALSE;  }
希望本文所述对大家的C++程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部