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);
    }
  • 相关阅读:
    MySQL基础知识总结
    PHP常见算法
    PHP程序功能设计
    SVN配置使用及移植
    推荐一个SpringBoot + Vue + MyBatis 音乐网站项目
    累积sql常用查询语句「Oracle」
    Nginx服务器设置http/https正向代理,使用ngx_http_proxy_connect_module模块
    squid配置文件
    nginx命令
    k8s与Docker有啥关系
  • 原文地址:https://www.cnblogs.com/Lthis/p/4266642.html
Copyright © 2011-2022 走看看