gpt4 book ai didi

c++ - 我可以通过不正确地使用指针分配和值更改来破坏我的操作系统吗?

转载 作者:行者123 更新时间:2023-12-01 15:06:35 25 4
gpt4 key购买 nike

正如标题所示,我是 C++ 新手,并且在 Code::Blocks IDE 上练习了许多不同的程序。我今天想到了这个,似乎无法得到准确的答案。我是否会因指针使用不当而无意中损坏操作系统上的数据?再详细一点,将:

char *p ; //creating uninitialized pointer with a random address; 
//let's assume it's the address to a variable within a valid file?
*p = 'G' ;

//or

int *p ;
*p = 2 ;
可以在我的 IDE/编译器文件中执行此操作可能会损坏某些数据,例如:
  • 操作系统文件 - 也许核心操作系统文件和从 1 ---> 2 的值更改可能会导致对外部设备的物理损坏。
    和/或
  • C: 驱动器上未打开的随机文件 - 例如一个经过 256 位加密的重要文件;单个值的更改将使解密文档几乎不可能,从而导致完全损坏且不可恢复的重要文档。直到几个月后,当我尝试打开文件但在解密过程中收到错误消息时,我才会意识到这种损坏。
    和/或
  • 使用临时内存的打开程序 - 例如,我目前正在运行一个冷藏比特币钱包程序(一个糟糕的程序),并且假设该程序打开了一个动态分配的加密文件。该文件包含访问 10 万美元冷藏比特币所需的备份 key 验证文件;文件中的字符更改将永久损坏文件,并基本上导致恢复 key 备份数据的丢失。因此,如果我忘记了我的比特币钱包密码,尝试使用恢复功能将会失败,并导致永久失去购买漂亮房子的首付。

  • 所以这些是一些例子,我想知道它们中的任何一个是否可以简单地通过指针来解决,尝试学习 C++。我不想在现在或将来意外地造成上述任何一种情况(也许正在从事一个更大的项目,其中上述情况会造成灾难),所以请让我知道这些情况是否可能(尽管非常发生的可能性很小,但仍有可能)。如果有可能使用无效指针破坏操作系统中的数据、扩大内存泄漏等,请您解释一下防止上述情况的动态。

    最佳答案

    应该设计一个设计合理的现代操作系统,这样您就不会通过运行您编写的程序来破坏操作系统。注意应该;看看CVE list对于许多情况并非如此的例子。

    您可能在其上进行开发的大多数操作系统的威胁模型并不能保护您的个人文件免受您运行的程序的侵害。见 XKCD 1200 .但是,您可以采取预防措施,例如:

  • 以单独的用户 ID
  • 运行程序
  • 或在虚拟机中运行程序
  • 或在 chroot 中运行程序环境
  • 或在强制访问控制生效时运行程序,这会阻止程序写入指定目录之外的文件或打开网络套接字(例如 SELinux)
  • 并通过正确理解程序并避免诸如此类的错误

  • 通过以下考虑也可以减轻风险:
  • 未初始化的指针很可能为零,因此为空,因此在使用时会导致段错误;或者如果设置为“随机”值,可能指向未映射的内存,结果相同
  • 即使您确实更改了后续 std::fstream::open 的参数(或来自 POSIX 的 open,或来自 C stdio API 的 fopen,或其他类似的特定于操作系统的函数),您实际上不太可能将其更改为与其他程序使用的文件名实际匹配的名称。更有可能在文件名中引入垃圾字节,或者直接截断它;除非您的程序已经在执行诸如“枚举我的主目录下的所有文件并打开每个文件”之类的操作。

  • 顺便说一句,在很多情况下,您为将“随机”位内存设置为“随机”的东西而提供的代码可能远非“随机”。例如,每次运行程序时它可能是相同的值。一些更好的(虽然是 C,而不是 C++)替代品......
       // #1
    char *p = rand();
    *p = rand();

    // #2
    FILE * randomDevice = fopen("/dev/urandom", "r");
    char *p;
    fread(&p, sizeof(char *), 1, randomDevice);
    fread( p, sizeof(char), 1, randomDevice);

    关于c++ - 我可以通过不正确地使用指针分配和值更改来破坏我的操作系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61463640/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com