如何以编程方式使系统崩溃
How to crash a system programmatically
如果我可以编写一个用户程序,使我的操作系统(不是我的应用程序)崩溃,我该怎么做?
我正在考虑以某种方式将我的用户模式程序切换到内核模式并导致内存损坏。这可能吗?
注意:我没有创建病毒。只是好奇心。
在Windows上KeBugCheck是获得BSOD的文档方式。
您也可以尝试在Windows XP中使用本地 NT API删除根注册表项(REGISTRY
)。
编写并加载调用panic()的内核模块或实现与之等价的内核模块
或者直接执行shutdown或halt命令或实现它的系统调用。
如果操作系统恰好是windows,创建一个假驱动程序去引用NULL指针。崩溃!
操作系统的全部思想是用户程序在正常情况下不会使其崩溃。当然,你仍然可以做一些事情,比如耗尽用于交换文件的分区上的磁盘空间,这将损害许多操作系统,或者你可能会发现一个已知的漏洞,但没有非常简单的方法来可靠地崩溃它。
在Linux中,Alt-SysRq-C会使内核崩溃或重新启动。
在Windows中,请参见:https://web.archive.org/web/20110513143420/http://www.dailygyan.com/2008/09/some-methods-to-crash-your-windows.html[编辑:2021年3月8日-由于网站宕机,切换到Archive.org链接]
对于Windows,一种可能性是编写一个内核模式驱动程序来锁定进程拥有的一些内存页,然后终止该进程。会导致BSOD "Process has locked pages"
Linux:即使没有严格地使操作系统崩溃,您也可以很容易地通过分配大量内存(并通过读写内存使分配变得有效并使操作系统大量交换)和分叉大量进程使其无法使用。"Fork bomb"是关键字,甚至可以在shell脚本中完成。
我认为你想让操作系统崩溃的原因与此相关。你是想模拟测试的条件,还是只是好奇?
如果您希望重新创建和自动化崩溃,以实现容错,这里有两个选项。
- 在虚拟机(vmware, VirtualBox)内运行,并简单地杀死虚拟机进程。或者你可以给它很低的优先级,丢弃设备,或者模拟不好的东西。
- 使用具有管理控制台的服务器。这将有一个API可以简单地关闭设备。
如果您希望从操作系统内部崩溃,那么其他许多建议都是不错的。这些软件崩溃可以帮助重现一个错误的进程。类似的一组硬件相关的崩溃也可能起作用(例如降低可编程风扇的速度和CPU过热)。
请求背后的原因实际上非常重要,因为所有不同的错误都会产生略有不同的结果。
尝试分配内存块,直到没有空闲内存:
int alloced = 0;
for(;;)
{
char *alloc = malloc(10*1024*1024); // alloc 10 MB
if(alloc != NULL)
{
alloced += 10;
// edit: you have to memset the memory otherwise the system will give it back to you next time
memset(alloc, 0xab, 10*1024*1024);
printf(" alloced %d MBn", alloced);
}
}
编辑:我实际上刚刚在64位linux上尝试了2GB内存和3.3GB交换空间:屏幕已经冻结,我可以分配4950MB内存,但随后该进程被系统杀死,linux优雅地重新站起来,所以,不,这不起作用:=)
使用纯用户模式应用程序使操作系统崩溃意味着内核是脆弱的。如果操作系统经过了良好的测试,那么这种情况应该不会发生。
你可以通过发送垃圾io控制来攻击有问题的第三方驱动程序来尝试BSoD Windows。
DeviceIoControl功能(Windows)http://msdn.microsoft.com/en-us/library/aa363216 (VS.85) . aspx
- 当回溯以零开始时,如何调试崩溃
- C++,系统无法执行指定的程序
- 在UNIX系统中使用DIR查找文件的字节大小
- 内联映射初始化的动态atexit析构函数崩溃
- 为什么此C 程序会导致系统崩溃
- 当功能返回时,Linux C 系统()调用崩溃
- OSX-Qt应用程序在接收系统事件QEvent::FileOpen时崩溃
- 应用程序在非开发系统上崩溃
- GNU 4.8.1系统更新后,任何C++编译都会崩溃
- 动态阵列导致系统崩溃
- Qt串行端口程序在另一个系统上运行时崩溃
- 在 Mac 上使用 boost::文件系统连接文件路径时程序崩溃
- QMediaPlayer 和 gstreamer 系统崩溃
- c++全系统崩溃,仅发布模式
- VS2012,使用系统函数调用exe,这会导致崩溃
- Linux:系统保护,防止c++和FORTRAN程序经常崩溃
- 如何使用多线程使系统崩溃
- 64位系统中的程序崩溃
- 访问计算机指针时发生访问冲突(c系统异常代码:c0000005),导致应用程序崩溃
- 如何以编程方式使系统崩溃