今天

在用windbg調試的時候 瞭解了以下指令:


1.F8=F11=t 步入
2.F10=p  步過
3.shift+F11 跳出 返回上級call
4.F5=g  運行
5.u  彙編
6.bp xxxx 下斷點
7.bl  查看斷點
8.bc 斷點序號 刪除斷點
9.bd 斷點序號 禁用斷點
10.be 斷點序號 啓用斷點
11.a xxxx  修改指令

12.查看寄存器

 

今天寫了個最簡單的驅動 然後又寫了個驅動加載程序(沒寫卸載程序 因爲怕麻煩O(∩_∩)O哈!) 源碼如下:

驅動程序:

.386
.model flat, stdcall
option casemap:none

include ntstatus.inc

include ntddk.inc


.code

DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING

int 3
add ebx,1
add ebx,2
add ebx,3
add ebx,4
add ebx,5
add ebx,6
add ebx,7

;mov eax,STATUS_DEVICE_CONFIGURATION_ERROR

ret

DriverEntry endp
 
end DriverEntry

 

加載程序:

.386
.model flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc
include advapi32.inc
includelib kernel32.lib
includelib user32.lib
includelib advapi32.lib


.data?
hSCManager dd ?
hService  dd ?
acDriverPath db 250 dup (?)

.data
szsysname db '1.sys',0
szfuwuname db '1',0
sz  db '/??/d:/我的文檔/桌面',0
.code
start:


invoke OpenSCManager,NULL,NULL,SC_MANAGER_CREATE_SERVICE
.if eax != NULL
 mov hSCManager, eax

  push eax
 invoke GetFullPathName,addr szsysname,sizeof acDriverPath,addr acDriverPath,esp
 pop eax

 invoke CreateService,hSCManager,addr szfuwuname,addr szfuwuname,SERVICE_START,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE,addr sz,NULL,NULL,NULL,NULL,NULL
 .if eax != NULL
 mov hService, eax

 invoke StartService,hService,0,NULL
 invoke MessageBox, NULL,addr szfuwuname,NULL,MB_OK


 .endif
.endif
 

end start

GetFullPathName獲得路徑老有問題 所以先擺在那 自己手動寫上 改天看看哪塊出錯了

2011年 4月22日補:原因是服務已經加載 要重新加載必須先卸載服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章