庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>实例分析>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

驱动程序的编译和连接

 作者:电子管    日期:2005-8-1 15:31:21
字号选择〖 〗/ 双击滚屏 单击停止   
下载ring0.bat...
    Kmdkit推荐的方法是把汇编源程序写成批处理bat文件,以天杀的ring0.sys为例
把下面的代码存成ring0.bat

;@echo off
;goto make
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      .586P         ;   保护模式
      .model flat,stdcall
      option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include \masm32\include\w2k\ntddk.inc
;   中断相关数据结构
IDT_REG      STRUCT
   limit      WORD   ?
   base      DWORD   ?
IDT_REG      ENDS

;   中断描述符
INT_DESCRIPTOR      STRUCT
   offs0_15   WORD   ?
   sel         WORD   ?
   paramcnt   BYTE   ?
   attrs      BYTE   ?
   offs16_31   WORD   ?
INT_DESCRIPTOR      ENDS

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      .code
   szBuffer   db   16 dup(0)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MyIntFunc   proc
      push   edx
      call   eax
      iretd
MyIntFunc   endp

;====================================================================
AddMyInt   proc      uses edi
      local   @IDT

      sidt   szBuffer
      mov      edi,(IDT_REG ptr [szBuffer]).base
      add      edi,21h*8

   ;   使用Int21中断,该中断在Win2k下没有使用
;      cli
      mov   eax,offset MyIntFunc
      mov   [edi],ax
      shr   eax,16
      mov   [edi+6],ax      ;   设置入口地址
      mov   [edi+2],cs      ;   设置段地址
   ;   设置Ring3可以访问
      mov   WORD ptr [edi+4],0EE00h
;      sti

      ret
AddMyInt   endp
;====================================================================
WdmUnload   proc   DriverObject:DWORD
      local   @IDT

      sidt   szBuffer
      mov      edi,(IDT_REG ptr [szBuffer]).base
      add      edi,21h*8
      xor   eax,eax
      mov   [edi],ax
      mov   [edi+6],ax      ;   设置入口地址
      mov   [edi+2],ax      ;   设置段地址
      mov   WORD ptr [edi+4],ax

      ret
WdmUnload   endp
;====================================================================
DriverEntry      proc   DriverObj:DWORD,RegistryPath:DWORD


      mov      eax,DriverObj
      assume   eax:ptr DRIVER_OBJECT
      mov      [eax].DriverUnload,offset WdmUnload
      assume   eax:nothing
      invoke   AddMyInt

      xor   eax,eax
      ret
DriverEntry      endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end DriverEntry

:make

set drv=ring0

\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
rem =====以上为ring0.bat的内容=============


双击ring0.bat,就完成了编译连接工作,生成了ring0.sys 怎么样?简单吧?

Kmdkit巧妙地把批处理和asm文件结合起来,使编译更傻瓜化。
需要修改代码时,在ring0.bat上点鼠标右键,点编辑。
需要编译时直接双击它.
需要注意的是,\masm32 和ring0.bat必须在一个磁盘上,如masm32安装在c:盘,ring0.bat也必须在c:盘
上一篇:驱动程序的动态加载    下一篇:Kmdkit的下载和安装  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 电子管
信息来源: 网络 录入时间: 2005-8-1 15:31:21
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿