- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
看了一本关于缓冲区溢出的书,建议接下来要处理:
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/
我使用 docker save : > image.rar 导出图像,然后使用 docker import image.rar 将其导入另一个系统。 我可以在运行 docker image ls 时看
我不知道我的设置有什么问题: siegfried@ubuntu:~/chef-repo$ knife ssh -a ipaddress 'name:chefnode' 'uptime'
我有 Pig 脚本和用 Node.js 编写的示例应用程序。我只想从 Node.js 运行 Pig 脚本。 最佳答案 我没有使用过 node.js。但在这里我找到了一个链接来展示如何在 node.js
我正在为需要使用 distutils.extension 编译的某些代码构建docker镜像。我有一个运行python setup.py build_ext --inplace的Makefile。 我
我是一名优秀的程序员,十分优秀!