在用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日補:原因是服務已經加載 要重新加載必須先卸載服務