· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Драйвер на FASM

Посл.отвђт Сообщенiе


Дата: Сен 8, 2003 13:34:35

Кто может объяснить, как это сделать


Дата: Сен 8, 2003 21:55:23

Кстати, весьма интересный вопрос !.. :)
Я не знаю как это заделать, но похоже надо лепить стандартный PE (с мелким выравниванием секций), а потом переименовывать в *.sys ... однако это не фонтан, конечно ... хотел было примеры из статей Four-F переделать под fasm, но до сих пор руки не дошли ;) ...


Дата: Сен 9, 2003 08:38:07

Вот типа простейший драйвер

format PE native 4.0
entry start

STATUS_DEVICE_CONFIGURATION_ERROR equ 00C0000182h

section ".section" code data readable writeable executable
start:
mov ecx, 880000000
_loop:
dec ecx
jnz _loop
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret 8

Странно, но драйвер этот не хочет работать, хотя всё правильно написано...


Дата: Сен 9, 2003 13:31:34

В MASM-овом драйвере кака-то секция INIT есть, видать в ней как раз и находится код, исполняющийся при загрузке


Дата: Сен 10, 2003 11:15:33

Ну и смешная штука этот fasm :-) Чего народ на нем сидит...
В общем проблемы три: CRC, флаг подсистемы окружения, релоки.

CRC и флаг подсистемы окружения (поставить Native) придется пофиксить вручную в PE-editore, т.к. фасм не позволяет этим управлять. Чтобы фасм добавил релоки пришлось ввести фейковую строку. После этого драйвер запускается.

format PE GUI 4.0 DLL
entry DriverEntry

include '%include%\win32a.inc'

STATUS_DEVICE_CONFIGURATION_ERROR equ 0C0000182h

section '.code' code readable executable

proc DriverEntry, pDriverObject, pusRegistryPath
        enter
        int 3
        lea eax, [_text]
        mov     eax, STATUS_DEVICE_CONFIGURATION_ERROR
        return

section '.data' data readable writeable

  _text db 'bla-bla', 0

section '.reloc' fixups readable data discardable


Дата: Сен 10, 2003 12:38:57

Да, CRC я уже догадался подправить, драйвер запустился, причём ещё и без релоков.

Ну вообще FASM развивается, может скоро появятся такие вещи, как объединения, sizeof(размер структуры определять)
, массивы, UNICODE строки, подключение .res файлов, ... и можно будет на нём серьёзные вещи писать, в том числе и драйверы.


Дата: Сен 10, 2003 16:11:15

Я когда-то тоже с этим сталкивался, но не стал заморачиваться с ручной правкой и т.п, сделал так:

format MS COFF
section '.text' code readable executable

extrn '__imp__IoCreateSymbolicLink@8' as IoCreateSymbolicLink:dword
extrn '__imp__IoDeleteSymbolicLink@4' as IoDeleteSymbolicLink:dword
extrn '__imp__IoCreateDevice@28' as IoCreateDevice:dword
extrn '__imp__IoDeleteDevice@4' as IoDeleteDevice:dword
extrn '__imp__IoCompleteRequest@8' as IoCompleteRequest:dword
extrn '__imp__MmIsAddressValid@4' as MmIsAddressValid:dword
extrn '__imp__MmAllocateContiguousMemory@12' as MmAllocateContiguousMemory:dword
extrn '__imp__MmGetPhysicalAddress@4' as MmGetPhysicalAddress:dword

public _Driver_entry

_Driver_entry: enter 4, 0

Короче, линкуем это с пощью ms link. Не совсем то, что нужно, но все же.
2dragon:
Драйвер без релоков будет работать только, когда в нем нет данных и, соответственно, настройка адресов не требуется.


Дата: Сен 15, 2003 03:04:01


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065