C-使用不可用的文件系统测试我的软件



我有一个代码,该代码试图 mmap一些文件。如果它可以mmap文件,则可以执行某些操作,如果无法mmap,它会做其他事情。

该代码在两种情况下都可以使用,但是我想在某些不支持MMAP的文件系统中进行一些测试。问题是我找不到任何无法MMAP的文件系统。

有人可以将我指出一些不可用的文件系统吗?

您可以使用库插入模拟非MMAP能力的系统。只需将此C文件

#include <errno.h>
#include <sys/mman.h>
void* mmap(void*, size_t, int, int, int, off_t) {
  errno = ENODEV;
  return NULL;
}

并将其编译到共享库。在LD_PRELOAD环境变量中命名该库的路径,并且应该优先于 real mmap,从而模拟MMAP始终失败的系统。这样,您可以在无需超级用户特权的情况下测试代码,而无需创建某些文件系统,而无需具有相应的内核模块,Userland工具等。

从理论上讲,您可能会遇到控制外部的某些库依赖于特定类型的MMAP来始终工作的情况。带有MAP_ANONYMOUS的地图是一个很好的示例,因为它不受文件系统的支持,因此不取决于FS类型。如果您在由于违反MMAP假设而遇到的库中遇到任何问题,则可能必须修改插入器以仔细查看其论点,并在拒绝其他人本身的同时将一些呼叫转发到LIBC实施中。但是,只有在需要真正出现的情况下,我才这样做。

最新更新