Здравствуйте. Написал простейшую программу для консоли: Код (Text): ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ include \masm32\include\masm32rt.inc ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ .data mess db "/",'$' hfile dd ? filename db "c:\mydriver.txt",0 buffer db ? .code start: ;data ;вычисляю как-то dl mov buffer,dl ;open mov ebx,offset filename mov edx,fopen(ebx) mov hfile,edx fseteof hfile ;seek end of file ;write mov ebx,offset mess mov eax,fwrite(hfile,ebx,1) mov ebx,offset buffer mov eax,fwrite(hfile,ebx,1) mov ebx,offset mess mov eax,fwrite(hfile,ebx,1) ;close fclose(hfile) exit end start Файл masm32rt.inc содержит строки: Код (Text): comment * ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« The MASM32 Runtime Library include file. Differing from most compilers, MASM does not contain any built in run time library so it is difficult for a programmer starting with MASM to to get any code up and running without having to learn a lot of extra information just to do basic things. This file simplifies entry into assembler programming by making the full capacity of the MASM32 library, macro system and include files available to programmers undertaking this quest. It specifies the normal conditions for building a 32 bit Windows program with the minimum processor type, memory model and the need for case sensitive capacity. The include files are declared in the correct order so that the windows.inc file is always first followed by static libraries and import libraries for Windows API functions. Where there is a corresponding library for either static or import libraries, it is included after the include files. NOTE : It is to the advantage of the programmer once they have their basic code up and running to properly understand the architecture of a MASM executable file so that they can construct their own projects to more accurately reflect their own application design. ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« * .486p ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive ; include files ; ~~~~~~~~~~~~~ include \masm32\include\windows.inc ; main windows include file include \masm32\include\masm32.inc ; masm32 library include ; ------------------------- ; Windows API include files ; ------------------------- include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\Comctl32.inc include \masm32\include\comdlg32.inc include \masm32\include\shell32.inc include \masm32\include\oleaut32.inc include \masm32\include\ole32.inc include \masm32\include\msvcrt.inc include \masm32\include\dialogs.inc ; macro file for dialogs include \masm32\macros\macros.asm ; masm32 macro file ; libraries ; ~~~~~~~~~ includelib \masm32\lib\masm32.lib ; masm32 static library ; ------------------------------------------ ; import libraries for Windows API functions ; ------------------------------------------ includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\Comctl32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\oleaut32.lib includelib \masm32\lib\ole32.lib includelib \masm32\lib\msvcrt.lib ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« В результате (ml /c /coff mydriver.asm и потом link /subsystem:console mydriver.obj) в текстовом файле появляется нужная мне информация, например /1/. Есть необходимость запустить данный код в привилегированом режиме чтобы получить доступ к закрытым регистрам. Переписал код так: Код (Text): ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ include \masm32\include\masm32rt.inc ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ .data mess db "/",'$' hfile dd ? filename db "c:\mydriver.txt",0 buffer db ? .code DriverEntry proc ;data ;считаю както dl mov buffer,dl ;open mov ebx,offset filename mov edx,fopen(ebx) mov hfile,edx fseteof hfile ;seek end of file ;write mov ebx,offset mess mov eax,fwrite(hfile,ebx,1) mov ebx,offset buffer mov eax,fwrite(hfile,ebx,1) mov ebx,offset mess mov eax,fwrite(hfile,ebx,1) ;close fclose(hfile) mov eax, 00C0000182h ; error ret DriverEntry endp end DriverEntry Затем получил mydriver.sys: ml /nologo /c /coff mydriver.asm link /driver /base:0x10000 /align:32 /out:mydriver.sys /subsystem:native mydriver.obj Для его загрузки добавил в реестр раздел с ключами: ImagePath — system32\DRIVERS\mydriver.sys Type — 1 Start — 2 ErrorControl — 1 В итоге полный в файле ничего не появляется, в журнале системы тоже нет никаких сообщений которые должны были появиться из-за mov eax, 00C0000182h (хотя система сам драйвер загрузить пытается). Цель не именно выдать в файл, а любым способом показать юзеру какуюто информацию из buffer, я выбрал именно через файл (мне казалось что так удобнее). Подскажите, что именно делаю не так?
Ну или может кто-то подскажет иные способы удобного вывода информации из кода драйвера (не в файл), или вообще иные способы доступа к закрытым регистрам (cr0 и тд).
http://www.wasm.ru/author.php?author=Four-F читать читать и читать. нету в ядре никаких kernel32 ни user32 и ничего вообще нет из перечисленного в masm32rt.inc.