Unison OS 如何处理引用的空指针、索引越界访问(不是写入)以及未初始化变量的使用?

Unison OS 如何处理引用的空指针、索引越界访问(不是写入)以及未初始化变量的使用?

我正在尝试确定特定的给定 C 语言源代码是否运行在统一操作系统可以想象,我可能会导致崩溃,以及通过什么向量。代码的某些部分有时会尝试取消引用空指针、访问但不写入越界的数组索引以及使用可能未初始化的变量。

该行为是未定义的,因此在 C 中是不可预测的,但根据我读过的其他讨论,操作系统和/或 CPU 在此类情况下将具有默认行为。

我不拥有有问题的代码,我也不想修复它。我只是想从高层次上了解这些(以及哪些)是否有合理的可能性导致程序崩溃。

答案1

我将尝试从总体上解决您的每种情况;我不是 Unison OS 方面的专家。

尝试取消引用空指针

如果程序取消引用 NULL 指针,则进程应该收到一个SIGSEGV.

访问但不写入超出范围的数组索引

这取决于进程是否可以读取结果地址。只要结果地址对于读取“有效”,尝试读取该值就会在给定地址获取适当数量的字节。如果它离开数组末尾“足够远”,达到地址不再有效的程度,那么进程应该收到一个SIGSEGV.

使用可能未初始化的变量

从内存中读取字节会返回最后存储在这些字节中的值。如果您的程序有一个未初始化的堆栈分配变量,然后尝试读取该变量,它将获得最后写入这些字节的任何内容。

相关内容