c++ - 通过 C a #define(或其他代码/编译时解决方案)省略核心转储?
问题描述
我了解操作系统有时会在发送信号时(通常在崩溃时)生成核心转储。有没有办法通过#define 或编译器标志从 C/C++内部告诉操作系统不可以通过该可执行文件生成特定限制的核心转储?我知道控制它的唯一方法是通过 ulimit -c。我的测试系统是Linux。无核心转储不需要在系统范围内实施,只针对特定程序。
对于感兴趣的人,这与Bitcoin Core 的 bitcoin-qt 中的CVE-2019-15947 有关,它仍然没有解决方案。
其中一些讨论位于比特币 GitHub 错误跟踪页面。
另一种选择是对内存中的 wallet.dat 进行模糊处理或加密,这样就不容易通过核心转储来检索它。请注意,第二个选项已经可以完成,但默认情况下未启用。
解决方案
根据您对“在代码/编译时”的定义,您可以安装信号处理程序并在接收到该信号时擦除内存。
但是,崩溃是由内核处理的,而不是编译器或可执行文件。无论您做什么,都无法阻止内核将内存从可执行文件内部转储到内核中。
因此,另一个选项听起来最好。
推荐阅读
- cuda - 如何使用 Thrust 中的一些预定义序列对向量进行排序
- mysql - Laravel 8 SQLSTATE [HY000] [1045] 用户'forge'@'localhost'的访问被拒绝(使用密码:否)
- powershell - 如果匹配模式后跟下一个模式与power shell中的计数不匹配,则要求添加4行
- html - 如何在 Mapbox gl js 中使用 AWS S3 光栅文件?
- java - java synchronized 无法同步
- angular - .NET Core 3.0 Web Api 和 Angular 10 应用程序可以托管在同一个 AWS EC2 Ubuntu 实例上吗?
- javascript - localStorage 不更新 Django
- php - 如何在MYSQL中组合不同的数据
- dialogflow-es - Ngrok url 每天都会更改我启动 Ngrok
- rust - 在结构内的向量内改变结构