⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kjl.txt

📁 驱动程序的编译和连接,推荐的方法是把汇编源程序写成批处理bat文件
💻 TXT
字号:
 .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:盘

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -