zyy正在BareMetal上写C语言程序,可是BareMetal环境下并没有对内存访问溢出的检查。请编写一个checker,对用户的访存操作进行检查。
用户的访存操作可以通过追踪相关系统调用(mmap
,read
,write
)的方式实现。我们约定相关系统调用的日志格式如下:
mmap(MemAddr, Size, Prot)
向进程空间映射一段内存区域,大小Size(字节)
/*
MemAddr: 映射内存区域的开始
Size:映射内存区域的大小
Prot:映射内存区域的权限(PROT_READ:可读,PROT_WRITE:可写,PROT_NONE:释放内存映射)
*/
read(MemAddr, Size)
write(MemAddr, Size)
你需要应对以下情况:
- 对未分配的内存区域的读写操作;
- 对已分配的内存区域的重复分配(不可通过以另一个PROT进行mmap来修改内存区域权限,但通过PROT_NONE释放除外);
- 对设置为只读内存区域的写操作;
在这些情况发生时,输出对应的错误信息,且不要执行对应操作。