X64论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

热搜: 样本 软件
查看: 29|回复: 2

[交流] “浅谈在驱动程序中结束进程的三种方式”的错误修改

[复制链接]

0

技术

3

魅力

0

原创

略有小成

Rank: 4

积分
1008
人气
21
分享
0
发表于 2022-9-17 21:59:33 | 显示全部楼层 |阅读模式
前阵子发了一篇名为“浅谈在驱动程序中结束进程的三种方法”。近日重读代码,发现有一处问题,特来修改
问题出现在内存清零中的这两行代码
[C++] 纯文本查看 复制代码
PKAPC_STATE pKs = (PKAPC_STATE)ExAllocatePool(NonPagedPool, sizeof(PKAPC_STATE));
KeStackAttachProcess(Eprocess, pKs);//Attach进程虚拟空间

可以看到,这段代码申请了一个非分页的内存空间,然后使用KeStackAttachProcess挂靠到指定进程
非分页内存本身就十分珍贵,而且在计算机内存紧缺时,申请内存可能会不成功。但本段代码没有对内存的申请成功与否做出判断,而是直接使用了这块内存,这就导致KeStackAttachProcess使用了一个非法的内存地址,在一些条件下可能会导致蓝屏。
所以,我们需要加入一个对申请的内存区域null与否的判断,修改后的代码如下
[C++] 纯文本查看 复制代码
PKAPC_STATE pKs = (PKAPC_STATE)ExAllocatePool(NonPagedPool, sizeof(PKAPC_STATE));
if(pKs == nullptr) return FALSE;
KeStackAttachProcess(Eprocess, pKs);//Attach进程虚拟空间

在内核编程中,需要对所有的内核资源都抱怀疑心态。意思就是:需要在使用一切资源前都判断资源是否真正可用,这也是笔者在日常的开发中践行的准则。

0

技术

5

魅力

2

原创

实习版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
2432
人气
80
分享
24

最佳新人活跃会员

发表于 2022-9-17 22:05:58 | 显示全部楼层
建议在内核开发中使用“防御式编程”,可以减少很多出现的错误
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至[email protected]

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
838
人气
24
分享
0
发表于 4 天前 | 显示全部楼层
YFSafe 发表于 2022-9-17 22:05
建议在内核开发中使用“防御式编程”,可以减少很多出现的错误

大小号轮流发是吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|X64论坛 ( 沪ICP备2020028431号-4 )|网站地图

GMT+8, 2022-9-25 22:59 , Processed in 0.054438 second(s), 8 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表