不要因非法行为而终止程序

不要因非法行为而终止程序

我有一个程序尝试使用释放的地址。当它这样做时,它会崩溃。我认为发生这种情况是因为 Linux 因错误行为而终止了程序。有没有什么方法可以在某种轻松的环境中运行程序,在这种环境中访问释放的内存只会给我警告并继续程序执行

答案1

进程由名为“信号”的功能终止,该功能自 20 世纪 70 年代以来一直存在于 UNIX 内核中。进程收到的访问非法内存的信号是 SIGSEGV(分段违规)。

大多数信号都会导致终止,但程序可以选择忽略特定类型的信号,或者在传递信号时运行信号处理例程。虽然并非所有信号都可以被忽略或处理,但 SIGSEGV 可以。

这在手册页中有记录信号(2)信号(7)。但是,您用 C++ 标记了您的问题。最有可能的是,C++ 有自己的基于signal系统调用的机制来做到这一点。

写完这些之后,我在 Stackoverflow 上找到了一个捕获 SIGSEGV 的 C++ 程序:https://stackoverflow.com/a/918891/3548109

答案2

由于对未映射内存的访问被应用程序视为错误行为,因此终止它们是绝对正确的。

想象一下其他程序访问内存你的另一方面,程序...

但您可以尝试使用不支持 MMU 编译的小型 Linux(仅在单用户系统上)。这样的系统将允许恶意内存访问。

相关内容