如果想校验内存中的代码,来检测程序是否被下int3断点或被改代码,就不能将算出的校验值填回源代码再编译。
原因很简单,如果代码中有字符串常量的地址,或者有函数地址在函数表的地址,则它们在重新编译后很可能会发生改变。
这样,重新编译的程序得出的校验值(此次计算的校验值),总是和你填回源代码的校验值(之前计算的校验值)不同,达不到校验的目的。
所以,应该将校验值填回原来的可执行文件,而不是填回源代码再编译。
如果想校验内存中的代码,来检测程序是否被下int3断点或被改代码,就不能将算出的校验值填回源代码再编译。
原因很简单,如果代码中有字符串常量的地址,或者有函数地址在函数表的地址,则它们在重新编译后很可能会发生改变。
这样,重新编译的程序得出的校验值(此次计算的校验值),总是和你填回源代码的校验值(之前计算的校验值)不同,达不到校验的目的。
所以,应该将校验值填回原来的可执行文件,而不是填回源代码再编译。
转载于:https://www.cnblogs.com/rdt2017/p/7282510.html