gpt4 book ai didi

c - 如果你的栈和堆是不可执行的,你的代码怎么跑?

转载 作者:太空狗 更新时间:2023-10-29 16:25:11 40 4
gpt4 key购买 nike

看了一本关于缓冲区溢出的书,建议接下来要处理:

Making the stack (and heap) non-executable provides a high degree of protection against many types of buffer overflow attacks for existing programs.

但我不明白我们该怎么做 - 如果不在堆上或堆栈上,执行将发生在哪里?

最佳答案

如果我正确理解了您的问题,那么其他答案都不会解决该问题。答案是执行发生在代码段,既不是栈也不是堆。在典型的分页内存系统中,来自程序文件(例如,Windows 中的 .exe)的代码被加载到可执行但只读的页面中。额外的可写(和可执行)页面被分配给堆栈和堆的进程。这里的建议是操作系统和硬件应该合作将这些页面标记为可写但不可执行(rgngl 的回答解释了如何在 Windows 中执行此操作)。

即使使用不可执行的堆和堆栈,利用 Alexey Frunze 的回答中提到的面向返回编程的漏洞仍然是可能的,但是有一些保护技术甚至可以阻止这些,例如堆栈粉碎保护和地址空间布局随机化-- 参见 http://en.wikipedia.org/wiki/Return-to-libc_attack#Protection_from_return-to-libc_attacks

关于c - 如果你的栈和堆是不可执行的,你的代码怎么跑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11481926/

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