首页 > 解决方案 > 通过 C a #define(或其他代码/编译时解决方案)省略核心转储?

问题描述

我了解操作系统有时会在发送信号时(通常在崩溃时)生成核心转储。有没有办法通过#define 或编译器标志从 C/C++内部告诉操作系统不可以通过该可执行文件生成特定限制的核心转储?我知道控制它的唯一方法是通过 ulimit -c。我的测试系统是Linux。无核心转储不需要在系统范围内实施,只针对特定程序。

对于感兴趣的人,这与Bitcoin Core 的 bitcoin-qt 中的CVE-2019-15947 有关,它仍然没有解决方案。

其中一些讨论位于比特币 GitHub 错误跟踪页面

另一种选择是对内存中的 wallet.dat 进行模糊处理或加密,这样就不容易通过核心转储来检索它。请注意,第二个选项已经可以完成,但默认情况下未启用。

标签: c++cbitcoincoredumpcrash-dumps

解决方案


根据您对“在代码/编译时”的定义,您可以安装信号处理程序并在接收到该信号时擦除内存。

但是,崩溃是由内核处理的,而不是编译器或可执行文件。无论您做什么,都无法阻止内核将内存从可执行文件内部转储到内核中。

因此,另一个选项听起来最好。


推荐阅读