计算PE文件校验和

摘要:
//计算PE校验和#include #pragmacomment(lib,“Imagehlp.lib”)voidGetchecksum(TCHAR*pszPath){/*CodebyLthis请指明重新发布的源*/DWORDwHeaderSum,dwCheckSum;//存储通用PE文件中的CheckSum字段//它是从该代码中的dwHeaderSum获得的值。//打开文件HANDL
// 计算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文件校验和》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇对ElasticSearch主副分片的理解【video】使用FFmpeg将avi / mp4文件转换成m3u8/ts文件(用于近时播放)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PE文件格式基本结构信息

一)win32下PE文件格式的文件有:*.exe;*.dll;*.scr;*.fon;*.drv;*.sys 二)pe文件基本结构 附加数据 其它节区 .reloc节区 .rsrc节区 .data节区 .text节区 节表 数据目录 选项头 文件头 PE标志 DOS stub DOS头 格式说明: 1)dos头: 0000 0000:4D 5A 000...

PE 学习之路 —— DOS 头、NT 头

1. 前述 可执行文件的格式是操作系统本身执行机制的反映,理解它有助于对操作系统的深刻理解,掌握可执行文件的数据结构及其一些机理,是研究软件安全的必修课。`PE(Portable Executable File Format)`是目前 windows 平台上的主流可执行文件格式。PE 文件衍生于早期的 COFF 文件格式,描述 PE 格式及 COFF 文件...

【C#进阶系列】02 PE文件,程序集,托管模块,元数据——还是那个Hello world

好了,还是这张图,还是一样的Hello world。 因为本章其实很多都是讲一些命令行编译啊什么鬼的配置类的东西,要用的时候直接百度或者回头查书就可以了, 所以了解一下也就行了,也没有记录下来,接下来讲得只是我认为很有用的东西。 关于引用 请看上图,MyTest程序集下面有个引用,引用里面大家都知道有很多dll,而我们的源代码中只有那5个using引用某...

PE文件详解(四)

本文转自小甲鱼的PE文件详解系列原文传送门 到此为止,小甲鱼和大家已经学了许多关于 DOS header 和 PE header 的知识。接下来就该轮到SectionTable (区块表,也成节表)。 越学越多的结构,大家可能觉得PE挺乱挺杂的哈,所以这里插播下一下必要知识的详细注释,大伙可以按需要看。 PE文件中所有节的属性都被定义在节表中,节表由...