驱动开发学习笔记(3-4)–Four-F的驱动开发教程-最简单的设备驱动程序

在这里下载本文的源代码

3. 最简单的设备驱动程序

※ 和本章内容相关的源代码见:
KmdKit\examples\simple\Beeper
KmdKit\examples\simple\DateTime

3.1 如何编译和链接内核模式驱动程序

我总是把驱动程序的汇编源代码放到批处理文件中,这样的文件从内容上看是.asm和.bat文件的混合体,但是扩展名是.bat(注:读者在实际使用的时候是不是这样做完全可以根据个人喜好而定)

;@echo off
;goto make

.386                      ; driver's code start
  ;::::::::::::::::::::::::::::::::
  ; the rest of the driver's code ;
  ;::::::::::::::::::::::::::::::::
end DriverEntry            ; driver's code end

:make
set drv=drvname
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause

如果你运行这个”自编译”的批处理文件的话,系统会做以下的事情:
对于汇编编译器来说,前面两行的命令是被注释掉的,所以会被忽略;但是对于命令解释器来说,这两行会被执行,因为命令解释器会忽略前面的分号。这样一来,执行会跳到最后面的:make标号处,接下来下面的编译和链接命令就会被执行,跳转语句和:make标号中间的汇编源代码会被忽略。另外,对于汇编编译器来说,所有end标号后面的内容都会被忽略,所以后面的:make及其后的内容会被编译器忽略。
这种方式用起来很方便,因为源代码和如何编译、链接程序的信息都被放在一起了,如果需要的话,读者也可以自己另外加些命令上去,在我编写的所有的驱动代码中,我都使用了这种方法。
下面我来解释一下:make后面的一些命令的含义。

Continue Reading

驱动开发学习笔记(3-3)–Four-F的驱动开发教程-服务

在这里下载本文的源代码

2. 服务

※ 和本节对应的例子代码见KmdKit\examples\simple\Beeper

读者也许有点疑惑:用户模式的服务关内核模式的驱动程序什么事呀?事实上,两者的确风马牛不相及,但是如果我们要和设备驱动程序通讯的话,我们必须首先安装它,启动它,而和设备驱动程序通讯的界面刚好和服务通讯的界面是类似的。

2.1 Windows服务

Windows NT使用某种机制来启动进程,并让它们不和某个具体的交互式的用户界面相关联,这些进程就被称为服务(service),服务的一个很好的例子就是Web服务器,这些Web服务都没有用户界面,服务是唯一以这种方式运行的应用程序(注:指没有用户界面,当然,严格地说病毒、木马以及所有不想见光的程序也是这样的~~),服务可以在系统启动的时候自动启动,也可以被手工启动,从这一点来看,设备驱动程序和服务是类似的。
Windows NT还支持驱动程序服务,只要使用的时候遵循设备驱动程序协议就可以了,这和用户模式的服务类似,所以,”服务”一词既可以指用户模式的服务进程或者内核模式的设备驱动程序,微软不知何故没有明确地区分两者的概念,所以下面的叙述可能看起来有点让人疑惑。可能有的地方我会说到”driver”一词,但在其他的文章中可能说到”service”一词,但既然这篇教程讲的是如何编写内核设备驱动程序,那么我们就约定无论说到”service”还是”driver”,我们的意思都是指”驱动程序”,当的确需要提及”服务”的时候,我会明确地指出来的。
另外,请读者时刻记得,文档中关于服务管理的函数其实是叙述得相当含糊的,因为这些函数既能用于驱动程序也能用于服务,在下面的文章中,我们只强调它们在驱动方面的用途和忽略服务方面的用途。
Windows NT中有三个组件和服务管理相关:
◎ 服务控制管理器(Service Control Manager/SCM)–用于启动服务以及和它通讯
◎ 服务控制程序(Service Control Program/SCP)–用于和SCM进行通讯,告诉它何时启动或者停止服务

Continue Reading

驱动开发学习笔记(3-2)–Four-F的驱动开发教程-内核模式驱动程序基础

1.Kernel Mode驱动程序基础

本教程讲述了如何在Windows NT为基础的操作系统上用Win32汇编开发KMD,包括NT4.0、2000、XP和2003等操作系统。开发Windows 95/98/ME使用的VxD驱动程序方面的知识并不在本教程讲述的范围内,另外,毫无疑问本教程并不那么完美,可能还包含了诸多未发现的错误,如果您发现了问题,请告知作者,毕竟作者的母语并不是英语,把它翻译成英文已经够难为我了(注:原作者是俄国人也),也感谢masquer和Volodya的校对工作。

1.1 KMD结构概述

1.1.1 主要组成部分

根据地址空间、代码权限和职责的不同,Windows NT内部划分为两个截然不同的部分。
地址空间的享用方式也非常容易理解,整个32位系统的4GB内容被划分为两个相等的部分,用户模式(user-mode)的进程使用的地址空间被映射到低位的2GB上(地址范围00000000 – 7FFFFFFFh),而高位的2GB(地址范围80000000h – 0FFFFFFFFh)则供操作系统的组成部分来使用,如设备驱动程序、系统内存池、系统使用的数据结构等,在这部分中,内存共享的权限和职责等方面就要复杂一点了。

下面就是用户模式进程的一些简单分类:
◎ 系统支持进程–如Logon进程(位于\%SystemRoot%\System32\Winlogon.exe)
◎ 服务进程–如Spooler进程(位于\%SystemRoot%\System32\spoolsv.exe)
◎ 用户应用程序–任何Win32、Windows 3.1、DOS、POSIX或者OS/2程序
◎ 子系统–Windows内置3个子系统:Win32(位于\%SystemRoot%\System32\Csrss.exe)、POSIX子系统(位于\%SystemRoot%\System32\Psxss.exe)和OS/2子系统(位于\%SystemRoot%\System32\Os2ss.exe),在Windows XP以及后续的操作系统中,POSIX和OS/2子系统已经被去掉了。

Continue Reading

驱动开发学习笔记(3-1)–Four-F的驱动开发教程-前言

0.前言

0.1 关于KmdTut

KmdTut是一份以Win32汇编语言来开发Kernel mode驱动程序的教程,读者可以从http://www.freewebs.com/four-f/下载最新的英文版本,为了使用本教程,你还需要下载Kernel mode驱动程序开发包KmdKit,更多信息请参考http://www.wasm.ru/(很不幸,是俄文的,倒ing~~~)

0.2 关于KmdKit

KmdKit的全称是Kernel Mode Driver development Kit for assembly language programmers,即内核模式驱动程序汇编开发包,KmdKit中包括了用宏汇编编译器开发驱动程序需要用到的所有东西。
你可以从http://www.wasm.ru/或者http://www.freewebs.com/four-f/下载到最新版本的KmdKit。

0.3 关于KmdTut中文版

本中文版由罗云彬和刘松翻译,首先发表在http://asm.yeah.net(罗云彬的编程乐园)中,如果需要转载或者引用,请注明出处。
虽然本人(这里的本人当然是指罗云彬了~~)在一些使用习惯上并不十分赞同原作者的使用方式,如将汇编代码和Makefile的内容合并放在BAT文件中、还有过多的使用宏来定义字符串等方式,因为个人认为严格地按照常规的方式来写代码更有利于读者理解,但是在翻译的时候,还是首先尊重原作,读者对于文中的一些和个性化的表达方式可以自行取舍。

◎ 将汇编代码和编译命令一同放在BAT文件中的缺点:
一般在汇编项目往往将编译命令放在Makefile中,并且使用nmake工具来进行编译,在本人著的《Windows环境下32位汇编语言程序设计》一书中,所有的例子都是这样写的。这样写的好处实际上就是nmake工具带来的好处——那就是源文件的从属关系清晰,编译链接的效率很高,符合流行的习惯等。

Continue Reading

700+ OllyDbgScripts

猛击此处下载文件!https://cloud.189.cn/t/jmemA3a6fqIj (访问码:lf58) smile smile

2008-04-05 20:47 220 32Lite 0.03a OEP Finder v0.1.txt
2006-01-15 00:00 218 32Lite 0.03a OEP V0.1.txt
2008-05-18 00:33 218 32LITE 0.03A OEP-FINDER V.0.1.txt
2004-11-14 19:55 218 32Lite 0.03a.txt
2008-05-18 00:33 2,490 ActiveMark 5.4x Level 2 EP Finder + Fix CRC.txt
2008-05-18 00:33 1,380 ActiveMark 5.4x Remove Selfchecks.txt
2008-05-18 00:33 474 ActiveMark 5.xx Level 2 EP Finder.txt
2006-01-15 00:00 801 ActiveMark Level 2 EP Finder.txt
2006-01-15 00:00 441 ActiveMark Patching Script.txt
2008-04-05 20:50 2,648 activemark54x.txt
2008-04-05 20:50 4,919 AddrEnc.txt
2008-04-05 20:50 1,075 AHpack 0.1 OEP Finder .txt
2008-04-05 20:50 1,017 AHTeam EP Protector 0.3a.txt
2008-04-05 20:50 1,227 AHTeam EP Protector 0.3b.txt
2006-01-15 00:00 3,515 Alex Protector 1.0 Beta 2 Fix IAT + Remove Junk Code v0.1.txt
2008-04-05 20:50 3,515 ALEX PROTECTOR 1.0 BETA2 V0.1.txt
2006-01-15 00:00 3,515 ALEX Protector1.0.txt
2008-04-05 20:50 801 AM.level2.ep.finder.txt
2008-04-05 20:51 396 AM.patching.script.txt

Continue Reading

百度推出“框计算” 或将终结微软操作系统

本报讯(记者 常燕 实习生 张越)除了搜索,未来搜索框也将是你的浏览器,甚至就是你的操作系统——至少,百度CEO李彦宏是这么想的,也正在这么做。

近日,百度年度技术峰会“2009年百度技术创新大会”在北京召开,百度董事长兼CEO李彦宏在大会上发表“框广天地,创新无限”的主题演讲时透露,百度下一代搜索名叫“框计算”。

“未来的电脑或者是终端,不一定只是电脑,有可能是手机,有可能是上网本,将不再需要通过好几分钟才能把操作系统启动。当你一按开关键的时候,一秒钟之内就会出现一个框,我们传统叫搜索框,但是它其实已经不再是一个单纯的搜索框了,它变成一个更加普及的框,只要有这样一个框,你的需求可以全部被满足。”李彦宏说。

连接:http://finance.qq.com/a/20090927/000493.htm

PS: 以上是某篇新闻的原文,也给出连接了。这个口号不可谓不牛B,如果单纯的一个框就能解决一切,那么微软早就完蛋了。而这个框我想google也是可以做的出来的吧。

最简单的问题就是,这个框–一秒钟启动的框,可以在里面运行魔兽争霸么?如果不能怎么满足全部的需求? laugh laugh