- 博客(6)
- 收藏
- 关注
原创 一个超简单的ring3与ring0通信的例子
<br /> 实际上是我想写一个隐藏文件的驱动,结果发现不是那么简单的事情,于是淡定下来先一步步走好吧.<br /> 我觉得我在学习一个东西时,喜欢把它脱得一丝不挂.所以不会有什么错误判断啊之类的.在能实现功能的前提下,尽量一切从简.<br /> 我觉得这和我的性格有关,shit,扯远了.<br /> <br />-----------------------------------------------分割线------------------------------------------------
2011-04-26 14:13:00 3696 1
原创 关于前篇提到的几个疑问的个人理解
1.PsGetCurrentProcess()获取的当前进程是哪个进程? 这个根据执行环境而定。对于DriverEntry,则看是谁最终负责加载的驱动:如果是服务式加载,那么得到的是Sytem进程的EPROCESS;如果是采用NTDLL.DLL中的ZwSetSystemInformation来实现加载,那么得到的EPROCESS则是调用此函数的任意进程。(卸载也应该是一样的)对于分发函数。分发函数的执行方式是系统回调,因此ring3上任何进程都可能触发这个回调,所以PsGetCurrentProcess()
2011-04-26 10:33:00 658
原创 关于代码简洁性与可读性的悖论
<br /> 本来打算博客只记录自己学内核的历程,不过这个好歹和昨天的文章有点关联性,就一起发上来吧。<br /> <br />参看《c专家编程》,作者认同的是代码的可读性,而不应该尽量简洁,例如让我感触最深的就是结构体尽量不要通过typedef定义别名减少每次定义变量时一个"struct”。我认为这是很有道理的,尤其是编写大程序的时候,要相信,随着bug和新需求的出现,后期维护的时长很可能大于软件的编写时长,我们的目光应该看得更远。<br /> <br />今天看国人的书《高质量程序设计指南》,关于后面的
2011-04-21 10:31:00 1253
原创 DKOM.修改双向链表隐藏进程.
DKOM即"直接内核对象操作",关于修改双向链表隐藏进程.网上和书刊上几乎都照抄了>一书,我发牢骚的是老外在修改链表时的精简代码看得莫名其妙.可能我太菜了吧对数据结构不熟悉,不过记得>的作者都说了,一行代码尽量干一件事情,表达一目了然.所以我自己重新写了一份.#include "ntddk.h"void Unload(IN PDRIVER_OBJECT DO){ DbgPrint("this is Unload!");}char* GetProcessNameByEPROCESS(ULONG ulAddr)
2011-04-20 17:08:00 1638
原创 关于vs编译的驱动体积大小问题
昨天用vs编译的驱动发现比同样代码用WDK自带编译的几乎大出一倍体积。考虑以前对ring3程序体积研究,首先想到的是pe文件对齐问题。于是在链接命令处加上 /align:16.编译后果然文件一下就从4K变成了1K多一点,不过先别高兴得太早,丢到虚拟机一跑,BSOD了,fuck!于是加为32字节,这次加载时没蓝屏,但是卸载的时候又BSOD了,再次fuck,我调成64字节之后终于好了,再看体积比WDK编译的仍旧要小几百字节呢。附网上找到的资料: 这么一个简单的玩意儿, GCCDDK编译后竟然达到24K, 如去
2011-04-20 13:45:00 951
原创 编写驱动的环境搭建
从编写到编译链接都有好几种方法,不过个人比较喜欢用vs的环境.再搭配上visual assist 让写驱动也不会那么枯燥了.关于vs的设置参考别人方法修改如下:1、安装了D/WDK,目录名字不要带空格;2、 在VS2005中新建立一个win32空项目,在工具栏选择"生成|配置管理器",在活动解决方案配置中 新建一个方案名(不要Debug、Release);3、选择 "工具|选项"菜单,选择"项目和解决方案" 选项卡,选择"VC++目录"选项卡在"显示以下内容的目录"下拉菜单中选择"包含文件"菜单 添加"(D
2011-04-19 14:30:00 1856
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人