转载:https://blog.csdn.net/lekonpeng/article/details/4150464

当我们完成一个工程,编译成可执行文件后,一般是不希望这个可执行文件被人改动的,那么这里就讲述一下这是如何做到的。

其实这并不难,只要一个API函数就可以完成,这就是MapFileAndCheckSum。这个函数的作用是

1)映象文件。

2)从映象文件中接受原始的校验和,它是在编译时有编译器写入文件的。

3)计算文件的校验和。

如果文件在编译后被改动,那么原始的校验和就会和计算得出的校验和不同,由此可知文件被改动。

下面的程序中,HeadChksum是原始的校验和,Chksum是计算得出的校验和,最后比较他们是否相同来判断文件是否被改动。

需要修改工程属性,在此用VS2012为例

第一步:C/C++ ---->General ---> Program Database(/Zi)

第二步:Linker ---> General ----> Enable Incremental Linking 设置为NO

第三步:Linker ---> Advanced ---> Set Cheksum 设置为Yse

测试工程:

#include <iostream>
#include <windows.h>
#include <Imagehlp.h> #pragma comment(lib,"imagehlp.lib") int main()
{
DWORD HeadChksum=,Chksum=; TCHAR text[]; GetModuleFileName(GetModuleHandle(NULL),text,); if (MapFileAndCheckSum(text,&HeadChksum,&Chksum) != CHECKSUM_SUCCESS)
{ MessageBox(NULL,L"Check error!",L"Error",MB_OK);
}
else
{
if (HeadChksum!=Chksum)
{
MessageBox(NULL,L"File changed.",L"Warning",MB_OK);
}
else
{
MessageBox(NULL,L"File No changed.",L"tip",MB_OK);
}
}
return ;
}

VC++使用MapFileAndCheckSum完成自检测的更多相关文章

  1. 在VC++中启用内存泄露检测

    检测内存泄漏的主要工具是调试器和 CRT 调试堆函数.若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h># ...

  2. 检测客户pc电脑端VC++环境并安装

    CefSharp 是一个非常不错的cef封装.但它依赖于VC++环境. 具体如下: Branch CEF Version VC++ Version .Net Version Status master ...

  3. [转载]浅谈C/C++内存泄漏及其检测工具

    http://dev.yesky.com/147/2356147_3.shtml 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如Sm ...

  4. [转]浅谈C/C++内存泄露及其检测工具

    转自:http://www.cnblogs.com/taoxu0903/archive/2007/10/27/939261.html 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问 ...

  5. 【内存泄漏】 C/C++内存泄漏及其检测工具

    对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Po ...

  6. C/C++内存泄露及检测工具

    内存泄漏的定义   一般我们常说的内存泄漏是指堆内存的泄漏.堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内 存.应用程序一般使用malloc,re ...

  7. CPP-基础:内存泄露及其检测工具

    [转]浅谈C/C++内存泄露及其检测工具   对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garba ...

  8. 代码内存泄露检测(1) MLeaksFinder (Wechat开源) + FBRetainCycleDetector (FaceBook开源)

    每次项目编译完成之后,都被内存搞得头昏脑胀,压力甚大. 利用两周时间,稍微研究了 微信开源的 MLeaksFinder 和 facebook 开源的 FBMemoryProfiler, 这两个开源三方 ...

  9. c++内存分配

    [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...

随机推荐

  1. selenium处理弹出窗口

    在selenium ui自动化测试过程中,经常会遇到,弹出新窗口,那么会对我们元素定位造成哪些影响呢? 1.元素id或xpath;name都没有问题,就是定位不到. 那如何解决呢?没错webdrive ...

  2. python No tests were found问题解决方法

    由于刚刚开始用python去写测试接口框架,在写的过程中遇到No tests were found问题 原因:python中unittest框架是以Test开头的方法,所以定义方法或类不能以Test开 ...

  3. java 运行时异常与非运行时异常理解

    参考:https://blog.csdn.net/lan12334321234/article/details/70049446 所谓的异常就是阻止当前程序或方法继续执行的问题 java异常分为两种: ...

  4. java 连接redis 以及基本操作

    一.首先下载安装redis 二.项目搭建 1.搭建一个maven 工程 2. 在pom.xml文件的dependencies节点下增加如下内容: <!-- resis --> <de ...

  5. 002-golang安装配置

    1.安装位置: 2.环境变量. path的值如下: 3.工作目录.

  6. windows编程之Windows Shell 编程

    参考书<VC++ Windows Shell Programming>   这里仅仅是记录下该资源,推荐到下文列出的连接进行查看   用VC++ 进行Windows Shell 扩展编成 ...

  7. Day11 多进程与多线程编程

    一.进程与线程 1.什么是进程(process)? An executing instance of a program is called a process. Each process provi ...

  8. 【转】Loadrunner 性能指标定位系统瓶颈

    转至:http://www.51testing.com/html/63/n-1224463.html Loadrunner 性能指标定位系统瓶颈 判断CPU瓶颈 1, %processor time ...

  9. eclipse 安装和使用AmaterasUML

    1. 安装AmaterasUML前,需要先安装GEF(Eclipse Graphical Editing Framework (GEF)) 采用eclipse在线安装方式安装就好. a. 查看ecli ...

  10. ClassTwo__HomeWork

    1,素数输出 设计思路声明两个函数分别用来实现输出任意两个数之间所有的素数和任意两个数之间最大最小的十个素数 方法一:一个数的因子不会大于它本身的开方; 方法二:创建一个数组来储存素数并输出最大最小的 ...