首页 > 代码库 > 计算PE文件校验和
计算PE文件校验和
// 计算PE校验和#include <ImageHlp.h>#pragma comment(lib,"Imagehlp.lib")void Getchecksum(TCHAR* pszPath){ /* Code by Lthis 转载请注明出处 */ DWORD dwHeaderSum, dwCheckSum; // 一般PE文件中CheckSum字段存储的 // 是本代码中的dwHeaderSum获取的值 // 打开文件 HANDLE hFile = CreateFile( pszPath, // 文件路径 GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if (hFile == INVALID_HANDLE_VALUE) return FALSE; // 获取文件大小 DWORD dwLowSize = 0; DWORD dwHighSize = 0; dwLowSize = GetFileSize(hFile, &dwHighSize); if (INVALID_FILE_SIZE == dwLowSize) { CString strErr; strErr.Format(_T("GetFileSize错误,错误码:%d"), GetLastError()); return FALSE; } LPBYTE lpBase = NULL; HANDLE hFileMapping = CreateFileMapping( hFile, NULL, PAGE_READWRITE, 0, dwLowSize, NULL ); lpBase = (LPBYTE)::MapViewOfFile( hFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, // 指定数据(就是指目标磁盘文件)中的哪个字节开始映射至内存 0 // 如果设定的值是0,那么系统将从文件中的指定位移开始到整个文件的结尾的视图映射到地址空间 ); if (NULL == lpBase) { CString strErr; strErr.Format(_T("MapViewOfFile错误,错误码:%d"), GetLastError()); MessageBox(0, strErr, 0, 0); return FALSE; } CheckSumMappedFile(lpBase, dwLowSize, &dwHeaderSum, &dwCheckSum); // 显示CheckSum m_strChkSum.Format(_T("%08X"), dwHeaderSum); m_edtChkSum.SetWindowText(m_strChkSum); // 清理工作 ::UnmapViewOfFile(lpBase); CloseHandle(hFileMapping); CloseHandle(hFile);}
计算PE文件校验和
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。