【原创】调用系统函数里面蓝屏例子

IRQL_NOT_LESS_OR_EQUAL (a)

An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000000, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000001, bitfield :
bit 0 : value 0 = read operation, 1 = write operation
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 82e9082f, address which referenced memory

eax=a78bb334 ebx=a78bb32c ecx=00000000 edx=00000000 esi=862f6768 edi=862f6828
eip=82e9082f esp=974ff890 ebp=974ff8f4 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
nt!KeWaitForSingleObject+0x373:
82e9082f 8939 mov dword ptr [ecx],edi ds:0023:00000000=????????
Resetting default scope

LAST_CONTROL_TRANSFER: from 82e9082f to 82e5acdb

STACK_TEXT:
974ff81c 82e9082f badb0d00 00000000 00000001 nt!KiTrap0E+0x2cf
974ff8f4 82e4a739 a78bb32c 00000022 00000000 nt!KeWaitForSingleObject+0x373
974ff91c 82eadc1a 00b11018 00000000 a78b0bde nt!KiAcquireFastMutex+0x56
974ff928 a78b0bde 830971fb 00b11018 974ffbdc nt!ExAcquireFastMutex+0x1e
974ffb54 a78b13b5 000000f0 00b10fc0 974ffc64 mydrv!DeleteElementGenericTable+0x4e

IRQL == DPC时访问内存出问题,在SSDT层IRQL 是不可能达到DPC的,ExAcquireFastMutex 本身会把IRQL提升到APC,这个时候PAGE是允许的,那是谁把IRQL提升到DPC?
先看MSDN怎么说 FastMutex
VOID
ExInitializeFastMutex(
IN PFAST_MUTEX FastMutex
);

Parameters
FastMutex
Pointer to a caller-allocated FAST_MUTEX structure, which represents the fast mutex, in the nonpaged memory pool.

要求 FastMutex 必须从非分页池分配,为啥,进入 KiAcquireFastMutex -> KeWaitForSingleObject 看。

.text:00454477 call ds:[email protected]@4 ; KfLowerIrql(x)
.text:0045447D call ds:[email protected] ; KeRaiseIrqlToDpcLevel()

KeWaitForSingleObject 内部在访问 FastMutex时是会把IRQL提升到DPC的。

回到问题本身,看出错指令
82e9082f 8939 mov dword ptr [ecx],edi ds:0023:00000000=????????

IDA
.text:00454704 loc_454704: ; CODE XREF: KeWaitForSingleObject(x,x,x,x,x)+30Ej
.text:00454704 ; KeWaitForSingleObject(x,x,x,x,x)+35Aj
.text:00454704 lea eax, [ebx+8] ; 参数
.text:00454707 mov ecx, [eax+4]
.text:0045470A mov [edi], eax
.text:0045470C mov [edi+4], ecx
.text:0045470F mov [ecx], edi
.text:00454711 mov [eax+4], edi
.text:00454714 mov eax, 0FFFFFF7Fh

应该是 参数有问题。

不考虑内存破坏,排查代码,最大可能是Mutex没初始化,再看代码,发现钩子生效时,Mutex可能还没初始化,一个典型的同步问题

时间: 2024-10-12 15:25:31

【原创】调用系统函数里面蓝屏例子的相关文章

解决Win8.1系统Wpprecorder.sys蓝屏故障

为了跨平台调试,在Mac Air使用Bootscamp安装了Windows 8.1,但是经常出现system_thread_exceptions_not_handled(Wpprecorder.sys)的故障,并导致蓝屏,只有通过修复系统才能正常启动.但是过一段时间又会出现,经过反复尝试,最终解决. 解决方法: 1.当出现该故障时候,等待错误信息收集完成(100%),重启,进入系统修复界面(重启后进入蓝屏界面,下面有高级选项,点击进入). 2.打开命令提示符. 3.执行命令: > c:\wind

怎么解决Win10系统电脑出现蓝屏显示错误0x00000050的问题?

Win10系统电脑蓝屏是我们在使用电脑时经常会遇到的事,通常是系统崩溃导致的错误,而每种错误都有其特定的代码,我们可以根据蓝屏时显示的错误代码来判断问题所在.今天就来介绍一下Win10系统电脑蓝屏显示错误0x00000050该怎么去解决. Win10系统电脑蓝屏显示错误0x00000050的解决方法1.使用"WIN+R"打开运行对话框,输入msconfig,按下回车,进入系统配置界面.2.在"常规"选项,勾选"有选择的启动",然后取消勾选&quo

系统出现0x0000006B蓝屏修复,系统文件损坏 bootcat.cache、driver.stl

系统蓝屏,无论如何都不能进入系统,所以你需要一个U盘启动器,就是能绕过电脑的系统进入电脑,可以用U盘做一个U盘启动器,或者其他方法均可以,只要能进入到你的电脑访问C盘即可 2 下载链接内的文件解压后放入U盘启动器内 3 找到 C:\Windows\System32\CodeIntegrity 删除bootcat.cache.driver.stl, 4 将下载的两个文件复制到该路径下替换删除掉的文件 5 重启电脑等待正常开机进入电脑即可 6 蓝屏问题完美解决 原文地址:https://www.cn

老司机示范win7系统蓝屏故障0x0000001的设置技巧分享干货的解决方法

此代码单从蓝屏出错界面给出的讯息不足以全面了解出错的原因,还需结合系统故障分析. 蓝屏故障图-1 再使用蓝屏查询器查询,就可以知道这个蓝屏代码的出错缘由是因为不正确的函数. 蓝屏代码0x0000001图-2 如果想知道具体的信息,就打开运行窗口,然后输入“EventVwr.msc”,再点确定.打开事件查看器,注意检查其中的系统日志和应用程序日志中标明错误的项. 蓝屏代码0x0000001图-3 要记得点选系统失败记录在案选项,否则蓝屏不能记录蓝屏事件(可能会被优化掉):先打开控制面板,接着点系统

B150主板Win7系统出现蓝屏且提示错误代码0x000000C5的原因及解决方法

最近有用户反映,使用网吧内客户机出现蓝屏问题,且提示错误代码0x000000C5,检查发现客户机主板使用的是B150,这该怎么办呢?本文将提供Win7系统出现蓝屏且提示错误代码0x000000C5的原因及解决方法供大家了解,希望对大家有所帮助 近来有网吧用户反馈网吧内客户机出现C5蓝屏问题,客户机主板使用的是B150,那么如何解决呢?下面脚本之家的小编就带来了Win7系统出现0x000000C5蓝屏的解决方法,一起来看看吧. 原因说明 DNF等游戏程序会利用intel 虚拟化技术,如果没有开启i

eclipse编译生成APK如何可以调用平台中的系统函数

我们在使用eclipse开发三方的APK时,有时候可能会遇到这样的问题,有些功能需要调用平台中的系统函数.但是在将应用导出的平台中运行时,会出现权限问题报错,那么我们就需要使用如下的方法,给三方应用签名,使之能够调用平台的系统函数: 1.我们需要去平台系统源码中获取如下两个秘钥文件和签名工具的jar包 签名jar包:out/host/linux-x86/framework/signapk.jar 秘钥文件:build\target\product\security\platform.x509.p

解决虚拟内存设置错误导致的系统蓝屏无法启动问题

一次偶然设置虚拟内存由于设置过大导致系统重启后蓝屏,进入无限系统修复界面,但怎么修复都无法正常进入系统,修复过程如下: 首先得有个Ghost 系统U盘,制作方法百度. 然后开机进入U盘引导,进入Ghost系统 ①  桌面→更多工具→设置虚拟内存→初始大小500最大值设置成和物理内存一致即可 ②  桌面→修复系统引导 ③  重启进入系统,重点:然后再重新设置一下虚拟内存.

win7下自写驱动导致开机蓝屏调试过程

之前没有接触过驱动调试.这里上手就要解决一个因为某个自定义驱动导致的系统登陆后蓝屏问题,记录下来.   问题: 从客户那边弄来的一个虚拟机,已知是加了我们的驱动之后才会导致蓝屏. 解决过程:   使用windbg直接双机调试 开机登陆后会直接蓝屏,错误码是0x00000050.想要进入安全模式去移除驱动也进不去,会卡在某个驱动加载过程中.首要的就是进入系统去排查是哪个驱动有问题.还好是虚拟机,有如下方式可更改操作系统中内容.,改完之后要在虚拟机射中的使用工具中断开相应映射. 注意:有些与具体设备

电脑蓝屏怎么解决,解决电脑蓝屏的方法

在更新系统漏洞或者补丁之后,如果出现不兼容或者其他原因都会导致电脑开机蓝屏,那么电脑蓝屏怎么解决?今天小编就来教大家解决电脑蓝屏的方法.具体内容如下: 分析及解决方法: 一.重启电脑.如果只是偶然出现蓝盘,那么我们只需要重启一下电脑即可. 二.利用360安全卫士等优化软件,启动蓝盘修复功能,或者找寻相应的补丁进行修复. 三.病毒导致.程序破坏等原因,都是由于木马.病毒等侵入导致,这时候也会影响到系统的稳定性,那么之后就会出现蓝屏的现象,这样的问题我们要及时清理杀毒即可. 四.硬件问题.电脑长时间