D. Segmentation fault (core dumped)

内存限制:16 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

zyy正在BareMetal上写C语言程序,可是BareMetal环境下并没有对内存访问溢出的检查。请编写一个checker,对用户的访存操作进行检查。

用户的访存操作可以通过追踪相关系统调用(mmapreadwrite)的方式实现。我们约定相关系统调用的日志格式如下:

mmap(MemAddr, Size, Prot)
向进程空间映射一段内存区域,大小Size(字节)
/*
MemAddr: 映射内存区域的开始
Size:映射内存区域的大小
Prot:映射内存区域的权限(PROT_READ:可读,PROT_WRITE:可写,PROT_NONE:释放内存映射)
*/
read(MemAddr, Size)
write(MemAddr, Size)

你需要应对以下情况:

  1. 对未分配的内存区域的读写操作;
  2. 对已分配的内存区域的重复分配(不可通过以另一个PROT进行mmap来修改内存区域权限,但通过PROT_NONE释放除外);
  3. 对设置为只读内存区域的写操作;

在这些情况发生时,输出对应的错误信息,且不要执行对应操作。

输入格式

第一行:内存空间大小

第二至不定行:系统调用日志

输出格式

对于无异常的操作,输出OK

对于情况1,输出Segmentation Fault: Not allocated

对于情况2, 输出Segmentation Fault: Re-allocating

对于情况3,输出Segmentation Fault: Read-only

当同时出现多个错误情况时,按照1-3的优先级输出第一个错误。

每组输出之间用换行符分开。

样例

【样例输入】

[0,1024)
mmap(108,22,PROT_READ)
read(108,22)
write(348,62)
write(181,24)
read(895,59)

【样例输出】

OK
OK
Segmentation Fault: Not allocated
Segmentation Fault: Not allocated
Segmentation Fault: Not allocated

数据范围与提示

,单次分配内存大小小于256。输入字符串中不含空格。

通告标题

通告内容

已知晓