避免将信息转储到核心文件中

2023-12-30

我想避免将程序中的某些信息转储到核心文件中,以防发生任何崩溃。

为此,我可以使用 coredump_filter (http://man7.org/linux/man-pages/man5/core.5.html http://man7.org/linux/man-pages/man5/core.5.html)

手册页提供以下描述

文件中的值是内存映射类型的位掩码(请参见 映射(2))。如果在掩码中设置了一位,则该位的内存映射 相应的类型被转储;否则它们不会被倾倒。这 该文件中的位具有以下含义:

       bit 0  Dump anonymous private mappings.
       bit 1  Dump anonymous shared mappings.
       bit 2  Dump file-backed private mappings.
       bit 3  Dump file-backed shared mappings.
       bit 4 (since Linux 2.6.24)
              Dump ELF headers.
       bit 5 (since Linux 2.6.28)
              Dump private huge pages.
       bit 6 (since Linux 2.6.28)
              Dump shared huge pages.

我想知道在我的情况下要设置和重置哪一位。我不清楚这些字段特别是私有和共享的。

我在内存中有一个缓冲区(unsigned char*)。我不想将其转储到核心文件中,以防发生任何崩溃。 mmap 是否需要使用任何特定标志?请帮忙。提前致谢。


coredump_filter只会设置进程全局设置,因此基本上只允许您转储所有内存或不转储内存。

然而,有一个标志madvise这可能会做一些更接近你想要的事情:MADV_DONTDUMP。它将标记未出现在核心转储中的特定内存页面。你的程序需要运行madvise但它本身;你不能从进程外部设置它(除非使用gdb, 我猜)。

请注意madvise然而,只能在整个页面上运行。您不能设置标志“这些 193 字节”或类似的标志来不被转储。如果您标记缓冲区所在的页面,则同一页面的其余部分也不会被转储。如果这对你来说是个问题,我想你只需要mmap在你的缓冲区中而不是mallocing 它,以便它单独出现在一个页面中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免将信息转储到核心文件中 的相关文章

随机推荐