日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用程序判断一个文件是否是有效的PE文件

發布時間:2025/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用程序判断一个文件是否是有效的PE文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

判斷一個文件是否為有效的PE文件,判斷2個字段:

??? DOS頭的e_magic字段是否為0x5A4D;

??? NT頭的Signature字段是否為0x00004550;

若都是的話則是一個有效的PE文件;

VC6,單文檔工程;

void CIspeView::OnDraw(CDC* pDC) {CIspeDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here//HANDLE hFile = CreateFile(TEXT("test.png"), GENERIC_ALL, NULL, NULL,OPEN_EXISTING,NULL,NULL);HANDLE hFile = CreateFile(TEXT("notepad.exe"), GENERIC_ALL, NULL, NULL,OPEN_EXISTING,NULL,NULL);if (hFile == INVALID_HANDLE_VALUE){//std::cout << "打開文件失敗!" << std::endl;pDC->TextOut(20,20,"打開文件失敗!");CloseHandle(hFile);exit(EXIT_SUCCESS);}// 獲取文件的大小DWORD dwFileSize = GetFileSize(hFile, NULL);// 申請內存空間,用于存放文件數據BYTE * FileBuffer = new BYTE[dwFileSize];// 讀取文件內容DWORD dwReadFile = 0;ReadFile(hFile, FileBuffer, dwFileSize, &dwReadFile, NULL);//檢查DOS頭中的MZ標記,判斷e_magic字段是否為0x5A4D,或者是IMAGE_DOS_SIGNATUREDWORD dwFileAddr = (DWORD)FileBuffer;//auto DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr;PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr;if (DosHeader->e_magic != IMAGE_DOS_SIGNATURE){// 如果不是則提示用戶,并立即結束::MessageBox(NULL, TEXT("這不是一個有效PE文件"), TEXT("提示"), MB_OK);delete FileBuffer;CloseHandle(hFile);exit(EXIT_SUCCESS);}// 若都通過的話再獲取NT頭所在的位置,并判斷Signature字段是否為0x00004550,或者是IMAGE_NT_SIGNATURE//auto NtHeader = (PIMAGE_NT_HEADERS)(dwFileAddr + DosHeader->e_lfanew);PIMAGE_NT_HEADERS NtHeader = (PIMAGE_NT_HEADERS)(dwFileAddr + DosHeader->e_lfanew);if (NtHeader->Signature != IMAGE_NT_SIGNATURE){// 如果不是則提示用戶,并立即結束::MessageBox(NULL, TEXT("這不是一個有效PE文件"), TEXT("提示"), MB_OK);delete FileBuffer;CloseHandle(hFile);exit(EXIT_SUCCESS);}// 若上述都通過,則為一個有效的PE文件//MessageBox(NULL, TEXT("這是一個有效PE文件"), TEXT("提示"), MB_OK);pDC->TextOut(20,60,"這是一個有效PE文件");delete FileBuffer;CloseHandle(hFile); }

拷貝一個test.png,notepad.exe到工程目錄;

當測試test.png時如下,

測試 notepad.exe 如下,

目前程序可用;

這一句如果寫為,

auto DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr;
則報錯,
cannot convert from 'struct _IMAGE_DOS_HEADER *' to 'int'

改為,

PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr;

如果是控制臺版本則需要包含 #include <windows.h>;

總結

以上是生活随笔為你收集整理的使用程序判断一个文件是否是有效的PE文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。