码迷,mamicode.com
首页 > 其他好文 > 详细

计算PE文件校验和

时间:2015-02-02 01:54:37      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

// 计算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文件校验和

标签:

原文地址:http://www.cnblogs.com/Lthis/p/4266642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!