刚开始学习C或C++时,是否存在危险知识这样的事情?换句话说,我有可能"意外地"编写和编译格式化硬盘驱动器的代码片段,使操作系统无法使用,或者更糟糕的情况是静默删除计算机上的随机文件?
像名副其实的东西
格式C:/
要么
rm -rf /
如果我刚刚开始修补低级C代码甚至搞乱库,那么需要注意哪些基本事项?
事实上,这些潜在的危险潜伏着什么是保持开发环境沙盒的日常系统的好策略?某些修补区域是否更好地留给虚拟化环境?
不需要进入明确的代码示例,但更一般的建议是我很好奇的.
我认为一个好的经验法则是:在编译和运行一些你在网上找到的随机代码片段之前,一定要了解代码.
注意: 如果相关,我在OS X上.
我认识到一个好的备份系统是无可替代的.黑客攻击破坏你的计算机,最多你失去一天或几小时的工作,并且必须恢复.
Dig*_*oss 44
操作系统已包含针对错误程序的保护.我们说C是"危险的"只是意味着它有原始指针和数组.
这些东西使得C和C++类似于硬件,快速和内存高效,但它们确实允许C程序在自己的内存中随机破坏某些内容.它自己的记忆,而不是任何其他程序.这不会损坏内存,只会更改一个C程序的功能......通常会中止.
你不能意外地伤害任何东西,除非你执行一些同样危险的东西,如果键入命令行,比如说,system(3)
你的程序中传递了"rm -rf" .
但是你可以从任何语言产生危险的OS命令.实际上,在较新的"高级"语言中更容易做到这一点.
多年前在我的386上,我正在学习用C编写低级视频卡编码而且我一定搞砸了,因为我没有写入特定的VGA寄存器,而是打了声卡而我的电脑发出了最不真实的尖叫声噪声.完全吓坏了我!这仍然是安全的,但我学到了宝贵的一课 - 力量带来了责任.
根据使用C或C++等语言的性质,您自然希望在较低级别与PC/WorkStation/OS进行交互,以便接受后果.
这就是为什么许多现代操作系统具有"主管"和"用户"级访问权限的原因.如果您真的想要将PC拧紧,那么请使用DDK
==编辑==记得另一个.几年前,我正在使用一些定制硬件,并拥有第一个原型板之一.我正在测试新的声音芯片,所以敲了一些快速的代码然后发送它然后我听到了一个巨大的流行音乐,看着像电容器一样的慢动作,并发送它的内容冲向我的眼睛.幸运的是,它只是错过了我的头.谁说C编码对你的健康没有坏处!
如果您在OS X上设置了合理的权限,则无需担心意外删除.
但是,一旦你从用户域转换到内核域,就有可能搞砸你的硬件.
详细说明内核土地开发的可能危险:
覆盖硬盘部门.
在其他进程中破坏内存,导致意外行为.
控制硬件意外后果.(可能会导致设计不良的硬件过度加热,破坏或重写固件时出现乱码).
可以通过在虚拟机中运行来消除这些问题.
不,这不是问题.与所有其他编程语言一样,C和C++处理程序中CPU上发生的事情.当然,您可以进行系统调用来格式化您的硬盘,但"格式化硬盘"不是C++语言的一部分.普通的错误代码只是崩溃(或者,当你运气不好时,不会崩溃,只是表现得很奇怪)
在这方面,它并不比Java,Python或任何其他语言更危险.所有这些都允许您进行可能导致问题的系统调用.但是只要你保持语言"内部",使用语言定义的结构(函数,类,指针,循环,等等),最糟糕的情况就是你破坏了你自己的程序.