我偶然发现了一个问题,希望您能帮助我理解。
在我的应用程序中,我有一个快照函数,它复制(ReadProcessMemory 或 memcpy,相同的结果)其所有代码 + 只读数据部分并将它们写入文件。然后我有一个验证功能,它读取文件并对文件中的内容和内存中的内容执行 memcmp。
如果我运行快照功能,然后在同一个会话中运行验证功能,无论我运行多少次验证,它都会一直说它们是相同的。
当我在一个会话中拍摄快照然后重新启动应用程序并运行验证时,如果内存相同与否,它似乎完全随机,有时它适用于应用程序的 3-4 次重新启动,但迟早它不会认为文件中的数据与 pe 部分代码相同。
这是运行之间的pe代码部分比较的链接:
http://i45.tinypic.com/4kad7b.jpg
它始终是同一件事,它将一个字符更改为另一个字符(在这种情况下?变为升高的 1),但从和到哪个字符总是不同的。
谁能解释为什么会这样?应该是这样,如果是,为什么?还是我做错了什么?
注意:我已经在调试和发布中测试了这个,无论是否附加调试器。