драйвер режима ядра

Тема в разделе "WASM.BEGINNERS", создана пользователем DENZMAX, 2 июл 2009.

  1. DENZMAX

    DENZMAX New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2009
    Сообщения:
    2
    Здравствуйте.
    Написал простейшую программу для консоли:
    Код (Text):
    1. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    2.     include \masm32\include\masm32rt.inc
    3. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    4. .data
    5.     mess db "/",'$'
    6.     hfile dd ?
    7.     filename db "c:\mydriver.txt",0  
    8.     buffer db ?
    9.  
    10. .code
    11.  
    12. start:  
    13.  
    14.     ;data
    15.     ;вычисляю как-то dl
    16.     mov buffer,dl
    17.  
    18.     ;open
    19.     mov ebx,offset filename
    20.     mov edx,fopen(ebx)
    21.     mov hfile,edx
    22.     fseteof hfile ;seek end of file
    23.  
    24.     ;write
    25.     mov ebx,offset mess
    26.     mov eax,fwrite(hfile,ebx,1)
    27.     mov ebx,offset buffer
    28.     mov eax,fwrite(hfile,ebx,1)
    29.     mov ebx,offset mess
    30.     mov eax,fwrite(hfile,ebx,1)
    31.  
    32.     ;close
    33.     fclose(hfile)
    34.  
    35.     exit
    36.  
    37. end start
    Файл masm32rt.inc содержит строки:
    Код (Text):
    1. comment * «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    2.  
    3.     The MASM32 Runtime Library include file.
    4.  
    5.     Differing from most compilers, MASM does not contain any built in
    6.     run time library so it is difficult for a programmer starting with
    7.     MASM to to get any code up and running without having to learn a lot
    8.     of extra information just to do basic things.
    9.    
    10.     This file simplifies entry into assembler programming by making the
    11.     full capacity of the MASM32 library, macro system and include files
    12.     available to programmers undertaking this quest.
    13.  
    14.     It specifies the normal conditions for building a 32 bit Windows
    15.     program with the minimum processor type, memory model and the need
    16.     for case sensitive capacity.
    17.  
    18.     The include files are declared in the correct order so that the
    19.     windows.inc file is always first followed by static libraries and
    20.     import libraries for Windows API functions.
    21.  
    22.     Where there is a corresponding library for either static or import
    23.     libraries, it is included after the include files.
    24.  
    25.     NOTE : It is to the advantage of the programmer once they have their
    26.     basic code up and running to properly understand the architecture
    27.     of a MASM executable file so that they can construct their own
    28.     projects to more accurately reflect their own application design.
    29.  
    30.   ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« *
    31.  
    32.       .486p                                      ; create 32 bit code
    33.       .model flat, stdcall                      ; 32 bit memory model
    34.       option casemap :none                      ; case sensitive
    35.  
    36. ;     include files
    37. ;     ~~~~~~~~~~~~~
    38.       include \masm32\include\windows.inc       ; main windows include file
    39.       include \masm32\include\masm32.inc        ; masm32 library include
    40.  
    41.     ; -------------------------
    42.     ; Windows API include files
    43.     ; -------------------------
    44.       include \masm32\include\gdi32.inc
    45.       include \masm32\include\user32.inc
    46.       include \masm32\include\kernel32.inc
    47.       include \masm32\include\Comctl32.inc
    48.       include \masm32\include\comdlg32.inc
    49.       include \masm32\include\shell32.inc
    50.       include \masm32\include\oleaut32.inc
    51.       include \masm32\include\ole32.inc
    52.       include \masm32\include\msvcrt.inc
    53.  
    54.       include \masm32\include\dialogs.inc       ; macro file for dialogs
    55.       include \masm32\macros\macros.asm         ; masm32 macro file
    56.  
    57. ;     libraries
    58. ;     ~~~~~~~~~
    59.       includelib \masm32\lib\masm32.lib         ; masm32 static library
    60.  
    61.     ; ------------------------------------------
    62.     ; import libraries for Windows API functions
    63.     ; ------------------------------------------
    64.       includelib \masm32\lib\gdi32.lib
    65.       includelib \masm32\lib\user32.lib
    66.       includelib \masm32\lib\kernel32.lib
    67.       includelib \masm32\lib\Comctl32.lib
    68.       includelib \masm32\lib\comdlg32.lib
    69.       includelib \masm32\lib\shell32.lib
    70.       includelib \masm32\lib\oleaut32.lib
    71.       includelib \masm32\lib\ole32.lib
    72.       includelib \masm32\lib\msvcrt.lib
    73.  
    74. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    В результате (ml /c /coff mydriver.asm и потом link /subsystem:console mydriver.obj) в текстовом файле появляется нужная мне информация, например /1/.
    Есть необходимость запустить данный код в привилегированом режиме чтобы получить доступ к закрытым регистрам. Переписал код так:
    Код (Text):
    1. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    2.     include \masm32\include\masm32rt.inc
    3. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    4. .data
    5.     mess db "/",'$'
    6.     hfile dd ?
    7.     filename db "c:\mydriver.txt",0  
    8.     buffer db ?
    9.  
    10. .code
    11.  
    12. DriverEntry proc  
    13.  
    14.     ;data
    15.     ;считаю както dl
    16.     mov buffer,dl
    17.  
    18.     ;open
    19.     mov ebx,offset filename
    20.     mov edx,fopen(ebx)
    21.     mov hfile,edx
    22.     fseteof hfile ;seek end of file
    23.  
    24.     ;write
    25.     mov ebx,offset mess
    26.     mov eax,fwrite(hfile,ebx,1)
    27.     mov ebx,offset buffer
    28.     mov eax,fwrite(hfile,ebx,1)
    29.     mov ebx,offset mess
    30.     mov eax,fwrite(hfile,ebx,1)
    31.  
    32.     ;close
    33.     fclose(hfile)
    34.  
    35.     mov eax, 00C0000182h       ; error
    36.  
    37.     ret
    38.  
    39. DriverEntry endp
    40. 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, я выбрал именно через файл (мне казалось что так удобнее). Подскажите, что именно делаю не так?
     
  2. DENZMAX

    DENZMAX New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2009
    Сообщения:
    2
    Ну или может кто-то подскажет иные способы удобного вывода информации из кода драйвера (не в файл), или вообще иные способы доступа к закрытым регистрам (cr0 и тд).
     
  3. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    DENZMAX, MessageBoxом выводите ;)
     
  4. ant_man

    ant_man New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2004
    Сообщения:
    23
    http://www.wasm.ru/author.php?author=Four-F

    читать читать и читать.
    нету в ядре никаких kernel32 ни user32 и ничего вообще нет из перечисленного в masm32rt.inc.