zoukankan      html  css  js  c++  java
  • 计算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);
    }
  • 相关阅读:
    5个排序算法
    原生侧边栏sidebar
    静态方法、实例方法、继承
    函数作用域之闭包与this!
    OOP面向对象编程(下)
    数组方法篇二
    对象
    nginx windows负载均衡入门
    NVelocity
    python3简单爬虫
  • 原文地址:https://www.cnblogs.com/Lthis/p/4266642.html
Copyright © 2011-2022 走看看