gpt4 book ai didi

c++ - 为什么 PE 部分会在运行之间发生变化?

转载 作者:行者123 更新时间:2023-11-28 00:55:27 25 4
gpt4 key购买 nike

我偶然发现了一个问题,希望您能帮助我理解。

在我的应用程序中,我有一个快照功能,可以复制(ReadProcessMemory 或 memcpy,相同的结果)它的所有代码 + 只读数据部分并将它们写入文件。然后我有一个验证函数,它读取文件并对文件中的内容和内存中的内容执行 memcmp。

如果我运行快照功能,然后在同一个 session 中运行验证功能,无论我运行多少次验证,它都会一直说它们是相同的。

当我在一个 session 中拍摄快照然后重新启动应用程序并运行验证时,内存是否相同似乎完全是随机的,有时它适用于应用程序的 3-4 次重新启动,但迟早它不会认为文件中的数据与pe段代码相同。

下面是运行之间的 pe 代码部分比较的链接:

http://i45.tinypic.com/4kad7b.jpg

它始终是同一件事,它是将一个字符更改为另一个字符(在本例中为 ? 更改为升高的 1),但从什么字符到什么字符总是不同的。

谁能解释为什么会这样?应该是这样吗,如果是这样,为什么?还是我做错了什么?

注意:我已经在调试和发布中测试了这个,无论是否附加了调试器。

最佳答案

出于安全原因,现代操作系统会随机化进程的内存布局。该机制称为 Address Space Layout Randomization (ALSR) .

在可执行文件中存在漏洞的情况下,通过攻击将外部代码注入(inject)应用程序会变得更加复杂。

关于c++ - 为什么 PE 部分会在运行之间发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com