查看: 517|回复: 2

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

[复制链接]

0

技术

3

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
868
人气
25
分享
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进程虚拟空间

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

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

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

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

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

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

本版积分规则

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