|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 25, 2004 18:36:00 Происходит ошибка при попытке загрузить драйвер beep.sys (из туториалов Four-F) Драйвер написан на FASM:
format PE native at 10000h
entry start
include 'C:\ра\Fasm\Projects\beep\beep.inc'
section '.code' code readable executable
proc start,pDriverObject,pusRegistryPath
enter
stdcall MakeBeep1, TONE_1
stdcall MakeBeep1, TONE_2
; Прямой доступ к оборудованию используя функцию HalMakeBeep из модуля hal.dll
stdcall MakeBeep1, TONE_3
DO_DELAY
stdcall MakeBeep1, 0
mov eax, ERROR_INVALID_PARAMETER
return
proc MakeBeep1,dwPitch
enter
cli
mov al, 10110110b
out 43h, al
mov eax, [dwPitch]
out 42h, al
mov al, ah
out 42h, al
; включить динамик
in al, 61h
or al, 11b
out 61h, al
sti
DO_DELAY
cli
; выключить динамик
in al, 61h
and al, 11111100b
out 61h, al
sti
return
;end section '.code'
section '.idata' import data readable writeable
_library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
gdi32,'GDI32.DLL',\
advapi32,'ADVAPI32.DLL',\
comctl32,'COMCTL32.DLL',\
comdlg32,'COMDLG32.DLL',\
shell32,'SHELL32.DLL',\
wsock32,'WSOCK32.DLL';,\
;MSVFW32,'MSVFW32.dll'
include 'C:\FASM135\147\INCLUDE\apia\kernel32.inc'
include 'C:\FASM135\147\INCLUDE\apia\user32.inc'
include 'C:\FASM135\147\INCLUDE\apia\gdi32.inc'
include 'C:\FASM135\147\INCLUDE\apia\advapi32.inc'
include 'C:\FASM135\147\INCLUDE\apia\comctl32.inc'
include 'C:\FASM135\147\INCLUDE\apia\comdlg32.inc'
include 'C:\FASM135\147\INCLUDE\apia\shell32.inc'
include 'C:\FASM135\147\INCLUDE\apia\wsock32.inc'
;end section '.idata'
Программа загружающая драйвер:
format PE GUI 4.0
entry start
include 'C:\ра\Fasm\Projects\Usedriver\Usedriver.inc'
section '.code' code readable executable
proc start
enter
invoke OpenSCManager,0,0, SC_MANAGER_CREATE_SERVICE
cmp eax,0
je .errNoOpenMan
mov [hSCManager],eax
push eax
invoke GetFullPathName, DriverName,acDriverPath.size,acDriverPath, esp
cmp eax,0
je .errName
pop eax
invoke CreateService, [hSCManager], NameDrv, OpisDrv, SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, acDriverPath, NULL, NULL, NULL, NULL, NULL
cmp eax,0
je .errNoCreateServ
mov [hService], eax
invoke StartService, [hService], 0, NULL
invoke DeleteService, [hService]
invoke CloseServiceHandle, [hService]
invoke CloseServiceHandle, [hSCManager]
jmp .finish
.errNoOpenMan:
invoke MessageBox,0,ErrNoOpenMan,ErrorMessage,MB_OK
jmp .finish
.errNoCreateServ:
invoke GetLastError
stdcall IntToString,buff,eax
invoke MessageBox,0,buff,ErrorMessage,MB_OK
jmp .finish
.errName:
invoke MessageBox,0,ErrName,ErrorMessage,MB_OK
jmp .finish
.finish:
invoke ExitProcess,0
return
;end section '.code'
section '.idata' import data readable writeable
_library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
gdi32,'GDI32.DLL',\
advapi32,'ADVAPI32.DLL',\
comctl32,'COMCTL32.DLL',\
comdlg32,'COMDLG32.DLL',\
shell32,'SHELL32.DLL',\
wsock32,'WSOCK32.DLL';,\
;MSVFW32,'MSVFW32.dll'
include 'C:\FASM135\147\INCLUDE\apia\kernel32.inc'
include 'C:\FASM135\147\INCLUDE\apia\user32.inc'
include 'C:\FASM135\147\INCLUDE\apia\gdi32.inc'
include 'C:\FASM135\147\INCLUDE\apia\advapi32.inc'
include 'C:\FASM135\147\INCLUDE\apia\comctl32.inc'
include 'C:\FASM135\147\INCLUDE\apia\comdlg32.inc'
include 'C:\FASM135\147\INCLUDE\apia\shell32.inc'
include 'C:\FASM135\147\INCLUDE\apia\wsock32.inc'
Вы даётся сообщение об ошибке: Не удалось загрузить драйвер устройства Код ошибки 0xc0000018 |
|
|
Дата: Июл 25, 2004 20:21:19 Код я не смотрел, т.к. не ясно в какой момент ошибка, но... c0000018 = "Попытка обращения к неверному адресу". Кстати, драйвер beep уже есть в системе. |
|
|
Дата: Июл 25, 2004 20:55:20 А что должен делать beep.sys? А то я удалил записи в реестре о нём. |
|
|
Дата: Июл 25, 2004 21:23:44 Диалог на эту тему есть на FASM форуме. include 'C:\ра\Fasm\Projects\beep\beep.inc' что в этой библиотеке? |
|
|
Дата: Июл 25, 2004 21:24:26 У вас не верно оформленна секция инициялизации драйвера смотрите пример с FASM ;##################################################################### ##### ; beeper ; 14.09.2003 - 16.10.2003 ; coded by comrade <comrade2k@hotmail.com> ; IRC: #asm, #coders, #win32asm on EFnet ; Web: http://comrade64.cjb.net/ ; http://comrade.win32asm.com/ ; Much credits to Four-F, BiDark, Kevin Zheng, and Privalov. ;##################################################################### ##### format PE native 4.0 at 10000h entry DriverEntry ;##################################################################### ##### _TITLE equ "beeper" _NAME equ "beeper" _VERSION equ "0.0" _VERSIONTEXT equ _VERSION ;##################################################################### ##### include "%include%/win32a.inc" include "%include%/macro/if.inc" include "%include%/macro/macros.inc" OFFSET equ ;##################################################################### ##### ;##################################################################### ##### ;##################################################################### ##### section '.text' code readable executable notpageable ;##################################################################### ##### ;##################################################################### ##### ;##################################################################### ##### proc DriverEntry,pDriverObject,pusRegistryPath enter cli ; speaker ON in al,61h or al,11b out 61h,al sti mov ecx,18000000h @@: loop @B cli ; speaker OFF in al,61h and al,11111100b out 61h,al sti .hal: stdcall [HalMakeBeep],1568 mov ecx,18000000h @@: loop @B stdcall [HalMakeBeep],0 .quit: mov eax,0C0000182h return ;##################################################################### ##### section '.rdata' import readable notpageable syslibrary hal,"hal.dll" import hal,HalMakeBeep,"HalMakeBeep" ;##################################################################### ##### szAppTitle db _TITLE,0 ;##################################################################### ##### section ".rsrc" resource data readable discardable ; identifiers IDV_MAIN = 01 ; resources directory RT_VERSION,versions resource versions,IDV_MAIN,SUBLANG_NEUTRAL+LANG_NEUTRAL,version ; version version version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,SUBLANG_NEUTRAL+LANG_NEUTR AL,0,\ "FileDescription",_TITLE,\ "LegalCopyright",<0A9h," comrade">,\ "FileVersion",_VERSION,\ "ProductVersion",_VERSION,\ "ProductName",_TITLE,\ "InternalName",_NAME,\ "OriginalFilename",<_NAME,".exe"> ;##################################################################### ##### section '.reloc' data fixups readable discardable ;##################################################################### ##### ;##################################################################### ##### |
|
|
Дата: Июл 25, 2004 22:01:56 ProgramMan Константы. С форума flatassembler взял пару исходников, поправил в соответствии с ними, но всё равно не идёт. Мой загрущик чужой драйвер загружает, а свой не получается. |
|
|
Дата: Июл 25, 2004 22:40:54 [ pas: А что должен делать beep.sys? ] А хрен его знает. Он совсем крошечный - возьми посмотри. [ pas: А то я удалил записи в реестре о нём. ] :-\ это зачем ? Не правильнее ли свою дровину переименовать. |
|
|
Дата: Июл 26, 2004 04:15:25 Four-F Не правильнее ли свою дровину переименовать. Правильней, но тогда я не знал, что это системная запись :-(. Хотя вроде и без неё пока работает. |
|
|
Дата: Июл 26, 2004 17:24:14 Почему если я убираю вызов call [imp_HalMakeBeep] возникает ошибка 0с0000018h.
format PE DLL native 4.0 at 10000h
entry main
include 'C:\FASM135\fasmw152\INCLUDE\win32a.inc'
section '.text' code readable executable notpageable
proc MakeBeep1,dwPitch
enter
;MakeBeep1:
cli
mov al,0B6h
out 43h,al
mov eax,[dwPitch]
out 42h,al
mov al,ah
out 42h,al
in al,61h
or al,3
out 61h,al
sti
mov eax,1800000h
.delay_loop:
dec eax
or eax,eax
jnz .delay_loop
cli
in al,61h
and al,0FCh
out 61h,al
sti
return
;endp
;MakeBeep2:
proc main,pDriverObject,pDriverPath
enter
;main:
push 474h
call MakeBeep1
push 389h
call MakeBeep1
push 620h
call MakeBeep1
mov eax,1800000h
.delay_loop:
dec eax
or eax,eax
jnz .delay_loop
;push 0
;call [imp_HalMakeBeep]
mov eax,0C0000182h
return
align 32
section '.rdata' readable notpageable
data 13
ImportLookup:
dd rva szRead_port_uc
dd rva szWrite_port_uc
dd rva szHalmakebeep
dd 0
end data
align 32
section 'INIT' import readable notpageable
dd rva ImportLookup
dd 0
dd 0
dd rva szHal_dll
dd rva ImportAddress
times 5 dd 0
ImportAddress:
imp_READ_PORT_UCHAR dd rva szRead_port_uc
imp_WRITE_PORT_UCHAR dd rva szWrite_port_uc
imp_HalMakeBeep dd rva szHalmakebeep
szHalmakebeep dw 0
db 'HalMakeBeep',0
szRead_port_uc dw 0
db 'READ_PORT_UCHAR',0
szWrite_port_uc dw 0
db 'WRITE_PORT_UCHAR',0
szHal_dll db 'HAL.dll',0
align 32
section '.reloc' data fixups readable discardable
|
|
|
Дата: Июл 26, 2004 17:31:46 У тебя в загрузчике есть один баг: если невозможно создать сервис, то нужно попробовать его открыть (OpenService), т.к. в случее если сервис уже создан CreateService возвращает ошибку. Мой загрущик чужой драйвер загружает, а свой не получается. Значит плохо правил. Выложи, что получилось. |
|
|
Дата: Июл 26, 2004 17:37:33 · Поправил: pas ProgramMan Но если создать не получается выдаётся сообщение с кодом ошибки. Код приведённый выше работает если функцию call [imp_HalMakeBeep] раскомментировать (c push-ем естественно) Да ещё У тебя в загрузчике есть один баг Это не баг это фишка :-) |
|
|
Дата: Июл 26, 2004 18:26:08 Это великий и ужасный глюк FASM компилятора!!! Я с ним сталкивался, но так и ненашёл :( Похоже что-то там связанно с размером кода или выравневанием... Такой код например тоже будет работать: format PE DLL native 4.0 at 10000h entry main include '%include%\win32a.inc' section '.text' code readable executable notpageable TableGDT: LTable dw 0h BTable db '000' ETable db 0h proc main,pDriverObject,pDriverPath push eax push ebx SGDT [TableGDT] mov ax,[LTable] mov ebx,Dword[BTable] pop ebx pop eax return endp section 'INIT' code import readable notpageable dd rva szHal_dll times 5 dd 0 szHal_dll db 'HAL.dll',0 section '.reloc' data fixups readable discardable |
|
|
Дата: Июл 26, 2004 18:28:24 FASM 1.52 |
|
|
Дата: Июл 26, 2004 19:19:03 Загрузил 1.53. Посмотрю, что получится. |
|
|
Дата: Июл 26, 2004 19:47:37 На нём тоже не всё работает |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.183 |