gpt4 book ai didi

c - 有了操作系统安全性和执行禁用功能,用 C 语言编程是否变得更容易了?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:09 28 4
gpt4 key购买 nike

我知道过去使用 C 可能会搞砸指针和内存分配,并且可能会意外损坏其他正在运行的程序或您程序之外的操作系统本身,并导致系统崩溃。这将需要重新启动以收拾残局并继续进行程序开发。

系统安全改进是否阻止了这种情况的发生?

过去的 MSDOS 和 Windows 3.1/95/98/Me,以及版本 10 之前的 MacOS,(通常在抢占式多任务处理成为所有事物的规范之前)系统安全性通常不存在。程序可以完全控制随时随地写入数据。

但是现在有了更现代的系统设计和进程安全性,系统安全性通常会阻止程序意外或故意损坏其他任何东西。

现代处理器的执行禁用功能也可能有助于防止意外跳转到随机内存位置并将那里的任何内容作为处理器机器代码运行。

那么,在不尝试破解操作系统安全性的情况下,您可以将使用 C 的现代编程搞砸到什么程度呢?

你还能设法不小心让整个系统崩溃吗?我认为这不再可能了。内核或其他系统安全介入并停止操作。

您是否会破坏您的登录环境并​​不得不注销并重新登录?我假设这也是被阻止的,因为进程通常不应访问其他进程内存空间,即使在您自己的登录安全环境中也是如此。

总的来说,现在用 C 语言编程似乎比过去容易得多,这只是因为现在到处都在使用这些系统保护措施,以防止您搬起石头砸自己和系统的脚。

最佳答案

在您可以不小心做的事情方面,它肯定比 MS-DOS 时代更容易。我记得有一个错误破坏了内存中的磁盘缓存。我很幸运在那之后还剩下任何东西。

现在,除非您正在编写在内核中运行的 C 代码,否则不可能再这样做了。除非您积极尝试利用漏洞,否则通常不会导致操作系统崩溃。

各种其他的东西,比如 NX 位和其他试图在 C 程序周围建立一些安全栅栏的尝试,它们确实会使你的程序崩溃得更快,并且在更接近错误真正发生的地方。但是它们远不及您使用简单的分隔地址空间所获得的胜利水平。它们旨在积极尝试利用更困难的事物,而且它们在这方面比在捕捉事故或错误方面做得更好。

并且破坏与整个操作系统不同的登录环境通常在统计上也不太可能。不过,如果您的程序正在执行复杂的文件操作,您可能会遇到一个会破坏用户文件的错误。

而且,如果没有真正使操作系统崩溃,您可能会意外导致资源耗尽。虽然这通常可以从中恢复,但它在进行时非常不舒服。您的系统速度变慢,甚至可能无法启动进程。 Linux 对此有一些保护。如果你把你的开发环境放在一个cgroup中,你可以完全阻止它。

当然,任何主动攻击可以做的事情,您都可能会错误地做。但是,我说的是偶然做这些事情的统计可能性。

自分离地址空间以来最大的改进可能是像 Valgrind 这样的工具。实时监控您的程序是否存在越界访问或对已释放内存的访问等。

MS-DOS 和早期的 Windows 非常奇怪,因为它们用作具有高质量 C 开发环境的通用计算机,并且还具有如此混杂的内存。 Windows 花了很长时间才克服这一点,而且平台上的编程实践仍然有点奇怪。

关于c - 有了操作系统安全性和执行禁用功能,用 C 语言编程是否变得更容易了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501212/

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