Драйвер на FASM: DbgPrint trouble.

Тема в разделе "WASM.NT.KERNEL", создана пользователем n0name, 24 янв 2007.

  1. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Собственно до меня не доходит почему BSOD с 0C0000005h.
    Код (Text):
    1. format PE DLL native 4.0 at 10000h
    2. entry DriverEntry
    3.  
    4. include 'macro/struct.inc'
    5. include 'macro/proc32.inc'
    6. include 'KMD/KMD.inc'
    7.  
    8. section '.text' code readable executable notpageable
    9.  
    10. proc DriverEntry lpDriverObject, lpusRegistryPath
    11.         cinvoke DbgPrint, szTest, 10
    12.         mov     [eax + DRIVER_OBJECT.DriverUnload], DriverUnload
    13.         mov     eax, STATUS_SUCCESS
    14.         ret
    15. endp
    16.  
    17. proc DriverUnload lpDriverObject
    18.         ret
    19. endp
    20.  
    21. section '.data' data readable writeable notpageable
    22.  
    23. szTest db 'Test value: %d', 0
    24.  
    25. section '.rdata' data readable notpageable
    26.  
    27. IAT     ntoskrnl,\
    28.         DbgPrint
    29.  
    30. section 'INIT' import code discardable executable readable writeable
    31.  
    32. library ntoskrnl,'ntoskrnl.exe'
    33.  
    34. import  ntoskrnl,\
    35.         DbgPrint,'DbgPrint'
    36.  
    37. section '.reloc' fixups data readable discardable
    если szTest = 'Hello', и cinvoke DbgPrint, szTest, то всё работает.
    листинг в IDA норма:
    Код (Text):
    1. .text:00010240                 push    ebp
    2. .text:00010241                 mov     ebp, esp
    3. .text:00010243                 push    0Ah
    4. .text:00010245                 push    offset Format   ; "Test value: %d"
    5. .text:0001024A                 call    ds:DbgPrint
    6. .text:00010250                 add     esp, 8
    7. .text:00010253                 mov     dword ptr [eax+34h], offset sub_10263
    8. .text:0001025A                 mov     eax, 0
    9. .text:0001025F                 leave
    10. .text:00010260                 retn    8
    Что такое? :\
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    у меня такой работает
    Код (Text):
    1. format PE native 4.0 at 10000h
    2. entry DriverEntry
    3.  
    4. include '%fasminc%\MACRO\PROC32.INC'
    5.  
    6. STATUS_UNSUCCESSFUL        = 0C0000001h
    7.  
    8. section '.text' code readable executable notpageable
    9.  
    10. DriverEntry:  ; pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    11. ;    int3
    12.     cinvoke DbgPrint, sz
    13.  
    14.     cli
    15.     mov eax, cr4
    16. ;    push eax
    17. ;    cinvoke DbgPrint, format_string, eax
    18. ;    pop eax
    19.     or eax, 04h  ; set
    20. ;    push eax
    21. ;    cinvoke DbgPrint, format_string, eax
    22. ;    pop eax
    23.     mov cr4, eax
    24.  
    25. ;    mov eax, cr4
    26. ;    and eax, not 04h  ; reset
    27. ;    push eax
    28. ;    cinvoke DbgPrint, format_string, eax
    29. ;    pop eax
    30. ;    mov cr4, eax
    31.     sti
    32.  
    33.     mov eax, STATUS_UNSUCCESSFUL  ; драйвер будет сразу выгружен
    34.     retn 2*4
    35.  
    36. section '.rdata' data readable notpageable
    37.  
    38. ntoskrnl_import_address_table:
    39.     DbgPrint dd rva _DbgPrint
    40.     dd 0
    41.  
    42. ; section '.data' data readable writeable notpageable
    43.  
    44. format_string  db  "cr4: %08lX",0Dh,0Ah,0
    45. sz db "Entered the Driver Entry",0Dh,0Ah,0
    46.  
    47. section 'INIT' import code readable writeable executable discardable
    48.  
    49.     dd rva ntoskrnl_import_lookup_table,0,0,rva ntoskrnl_name,rva ntoskrnl_import_address_table
    50.     dd 0,0,0,0,0
    51.  
    52. ntoskrnl_import_lookup_table:
    53.     dd rva _DbgPrint
    54.     dd 0
    55.  
    56. _DbgPrint dw 0
    57.     db 'DbgPrint',0
    58.  
    59. ntoskrnl_name db "ntoskrnl.exe",0
    60.  
    61. section '.reloc' data fixups readable discardable