从用户模式创建BSOD?

时间:2011-08-12 00:53:11

标签: c++ c kernel bsod

有一天,我对我的XP盒子感到厌倦,所以我决定尝试this question的一些答案,看看是否有任何一个会导致BSOD。
他们没有,他们似乎最有可能这样做,所以我想知道是否有可能在C / C ++中从用户模式触发BSOD,如果是这样,怎么样?

10 个答案:

答案 0 :(得分:11)

有未记录的函数NtRaiseHardError。

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Error/NtRaiseHardError.html

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Error/HARDERROR_RESPONSE_OPTION.html

如果第五个参数是6(OptionShutdownSystem),你将得到一个BSOD。这需要启用关闭权限。

答案 1 :(得分:7)

从用户模式制作BSOD非常困难,除非用户模式程序与错误的驱动程序交互(可能是特定的操作序列可以揭示特定驱动程序中的错误)干扰驱动程序堆栈。从用户模式来看,输入在进入内核模式之前已经过充分验证,以确保系统的稳定性。大多数Microsoft API /驱动程序已经过验证,可以避免系统中的安全问题;司机制造也是如此。

最好的方法是打扰驱动程序堆栈,但它不是用户模式。

您可以使用NotMyFault SystInternals实用程序创建BSOD。它从根本上注入了一个驱动程序并创建了BSOD

http://download.sysinternals.com/Files/Notmyfault.zip

答案 2 :(得分:5)

就是这样:

R> library(Rblpapi)
Rblpapi version 0.3.5 using Blpapi headers 3.8.8.1 and run-time 3.8.8.1.
Please respect the Bloomberg licensing agreement and terms of service.
R> spy <- bdh("SPY US EQUITY", c("Open","High","Low","PX_Last"), \
+             Sys.Date()-10, Sys.Date())
R> class(spy)
[1] "data.frame"
R> head(spy)
        date   Open    High     Low PX_Last
1 2016-12-05 220.65 221.400 220.420  221.00
2 2016-12-06 221.22 221.744 220.662  221.70
3 2016-12-07 221.52 224.670 221.380  224.60
4 2016-12-08 224.57 225.700 224.260  225.15
5 2016-12-09 225.41 226.530 225.370  226.51
6 2016-12-12 226.40 226.960 225.760  226.25
R> sx <- xts(spy[, -1], order.by=spy[,1])
R> colnames(sx)[4] <- "Close"         ## important
R> sxret <- diff(log(Cl(sx)))
R> head(sxret)
                Close
2016-12-05         NA
2016-12-06 0.00316242
2016-12-07 0.01299593
2016-12-08 0.00244580
2016-12-09 0.00602225
2016-12-12 -0.00114851
R> sxret <- ClCl(sx)                  ## equivalent shorthand using quantmod

答案 3 :(得分:3)

除了错误之外的方法是资源耗尽。您可以调查的一个区域是使用计算机上的所有CPU(运行与实时优先级核心一样多的线程),并使用内核资源并依赖实时优先级来阻止内核清理起来。

不确定什么是好资源。针对无法清理CPU的设备有很多出色的异步操作?你至少可以朝那个方向试验。

答案 4 :(得分:2)

如果操作系统中没有错误,则无法从用户空间对机器进行BSOD操作。在最坏的情况下,它应该会使违规应用程序崩溃。

但是,没有什么是完美的。每个操作系统都存在错误,并且每个操作系统都有错误导致BSOD(或Linux的OOPS,或者某个操作系统选择报告无法恢复的错误),这些错误可从用户空间利用。

就细节而言,它实际上取决于bug的性质。除了“是的,它是可能的”之外,没有通用的答案。

有关更多详细信息,您应该更多地了解操作系统设计,以及如何使用分页,环级别和其他技术将进程彼此分离以及内核空间。

答案 5 :(得分:2)

嗯,BSOD来自内核模式中发生的不可恢复的错误;如果不以某种方式触发内核错误,就没有办法导致这种情况发生。一般来说,如果你想这样做,你必须在驱动程序中找到一个缺陷[编辑:或者作为一个评论者指出,系统调用]并利用它。

或者,您可以执行此应用的操作:http://www.nirsoft.net/utils/start_blue_screen.html。只需编写自己的驱动程序即可以任何方式使系统崩溃。 :)

维基百科页面包含一些有趣的信息,因此我将其包含在内以供参考:http://en.wikipedia.org/wiki/Blue_Screen_of_Death

答案 6 :(得分:2)

您可以使用键盘force a system crash。你的标题谈到用户模式,我不确定这是否符合用户模式,但它可能有用。

答案 7 :(得分:1)

不使用驱动程序的两种方法:

  1. 使用未记录的函数NtRaiseHardError作为某人指出
  2. 使用未记录的函数RtlSetProcessIsCritical设置关键进程,然后终止它。需要SE_DEBUG_NAME权限。 http://www.codeproject.com/Articles/43405/Protecting-Your-Process-with-RtlSetProcessIsCriti

答案 8 :(得分:0)

我在此链接中发现了生成bsod的代码:https://www.mpgh.net/forum/showthread.php?t=1100477

这是代码(我尝试过,它可以工作,您只需要调用BlueScreen()函数)

:h :map-local
:h :autocmd
:h BufNewFile
:h BufRead

答案 9 :(得分:0)

只需打开 Windows 运行并输入 C:\con\con