C++判断pe文件实例

作者:shichen2014 时间:2022-01-19 12:29:52 

本文实例讲述了C++判断pe文件的方法。分享给大家供大家参考。

具体实现方法如下:

#include <afxdlgs.h>是为了使用CFileDialog
main.h如下:

#include <afxwin.h> 
 
class CMyApp:public CWinApp 

    BOOL InitInstance(); 
};

main.cpp如下:

#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++程序设计有所帮助。

标签:C++
0
投稿

猜你喜欢

  • Java文件操作实例详解

    2023-11-25 10:29:40
  • Android实现读取NFC卡卡号示例

    2021-08-06 21:08:39
  • Java应用/JVM宕机排查步骤操作

    2021-08-10 14:52:10
  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    2021-10-13 04:59:39
  • Android开发简易音乐播放器

    2023-12-26 01:07:03
  • Java花式解决'分割回文串 ii'问题详解

    2022-07-09 02:01:58
  • mybatis根据表逆向自动化生成代码的实现

    2023-03-12 15:39:02
  • Java Gradle项目中的资源正确获取方式

    2022-10-05 09:00:50
  • C#实现Zip压缩目录中所有文件的方法

    2021-05-29 15:41:47
  • winform 中显示异步下载的图片

    2022-09-03 19:04:07
  • MyBatis利用MyCat实现多租户的简单思路分享

    2022-08-16 18:58:33
  • c#操作Redis的5种基本类型汇总

    2021-06-03 03:24:07
  • Spring注解@DependsOn解析

    2022-01-11 08:20:35
  • Idea运行单个main方法,不编译整个工程的问题

    2021-09-06 09:57:22
  • Android 实现永久保存数据的方法详解

    2023-06-23 22:13:23
  • JVM完全解读之GC日志记录分析

    2022-09-22 12:43:08
  • Unity实现答题系统的示例代码

    2022-05-09 18:31:00
  • 关于java的九个预定义Class对象

    2023-08-16 01:56:16
  • 一篇文章带你使用C语言编写内核

    2022-01-12 12:57:48
  • C#延迟执行方法函数实例讲解

    2022-06-17 19:23:50
  • asp之家 软件编程 m.aspxhome.com