Read SST troubles

Тема в разделе "WASM.WIN32", создана пользователем GeNeZiS, 10 янв 2008.

  1. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    Доброго времени суток, уважаемые.

    Столкнулся со следующей проблемой.
    Имеется код:
    Код (Text):
    1. NtQuerySystemInformation(SystemModuleInformation, pModules, 4, &dwNeededSize);
    2. pModules = (PMODULES)GlobalAlloc(GPTR, dwNeededSize);
    3. NtQuerySystemInformation(SystemModuleInformation, pModules, dwNeededSize, NULL);
    4. DWORD dwKernelBase = (DWORD)pModules->smi.Base;
    5. PCHAR pKernelName = pModules->smi.ModuleNameOffset+pModules->smi.ImageName;
    пытаюсь сделать то же самое на асме:
    Код (Text):
    1. SYSTEM_MODULE_INFORMATION STRUCT
    2. ReservedDWORD 2 dup (?)
    3. BaseDWORD ?
    4. _SizeDWORD ?
    5. FlagsDWORD ?
    6. IndexDWORD ?
    7. UnknownDWORD ?
    8. LoadCountDWORD ?
    9. ModuleNameOffsetDWORD ?
    10. ImageNameBYTE 256 dup (?)
    11. SYSTEM_MODULE_INFORMATION ENDS
    12.  
    13. read_sst  proc pSST : DWORD
    14. LOCAL  dwSize       : DWORD
    15. LOCAL  dwBase       : DWORD
    16. LOCAL  szName     : DWORD
    17. LOCAL  Modules      : SYSTEM_MODULE_INFORMATION
    18.  
    19. lea  eax, dwSize
    20. lea  edx, Modules
    21. push  eax
    22. push  4
    23. push  edx
    24. push  11; SystemModuleInformation
    25. call  NtQuerySystemInformation
    26. sub  eax, 0C0000004h; STATUS_INFO_LENGTH_MISMATCH
    27. jnz  _error
    28.  
    29. push  PAGE_READWRITE
    30. push  MEM_COMMIT + MEM_RESERVE
    31. push  dwSize
    32. push  0
    33. call  VirtualAlloc
    34. test  eax, eax
    35. jz  _error
    36. mov  edx, eax
    37.  
    38. push  0
    39. push  dwSize
    40. push  edx
    41. push  11; SystemModuleInformation
    42. call  NtQuerySystemInformation
    43. test  eax, eax
    44. jnz  _error
    45.  
    46. lea  ebx, Modules.ImageName
    47. add  ebx, Modules.ModuleNameOffset
    48. mov  szName, ebx
    49.  
    50.  
    51.  
    52.  
    53. _error:
    54. ret
    55. read_sst  endp
    в итоге в szName получаю неизвестно что вместо имени.
    в чем может быть проблема?
    Спасибо за внимание.
     
  2. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    немного переделал код:

    Код (Text):
    1. SYSTEM_MODULE_INFORMATION   STRUCT
    2.     Reserved        DWORD 2 dup (?)
    3.     Base            DWORD ?
    4.     _Size           DWORD ?
    5.     Flags           DWORD ?
    6.     Index           DWORD ?
    7.     Unknown         DWORD ?
    8.     LoadCount       DWORD ?
    9.     ModuleNameOffset    DWORD ?
    10.     ImageName       BYTE 256 dup (?)
    11. SYSTEM_MODULE_INFORMATION   ENDS
    12.        
    13. MODULES     STRUCT
    14.     dwNumberOfModules   DWORD ?
    15.     _SMI            SYSTEM_MODULE_INFORMATION <>
    16.        
    17. MODULES     ENDS
    18.  
    19. ...
    20.  
    21. read_sst    proc pSST : DWORD
    22.     LOCAL   dwSize       : DWORD
    23.     LOCAL   dwBase       : DWORD
    24.     LOCAL   szName       : DWORD
    25.  
    26.     lea eax, dwSize
    27.        
    28.     assume  edx : ptr MODULES
    29.        
    30.     push    eax
    31.     push    4
    32.     push    edx
    33.     push    11              ; SystemModuleInformation
    34.     call    NtQuerySystemInformation
    35.     sub eax, 0C0000004h         ; STATUS_INFO_LENGTH_MISMATCH
    36.     jnz _error
    37.        
    38.     push    PAGE_READWRITE
    39.     push    MEM_COMMIT + MEM_RESERVE
    40.     push    dwSize
    41.     push    0
    42.     call    VirtualAlloc
    43.     test    eax, eax
    44.     jz  _error
    45.     mov edx, eax
    46.  
    47.     push    0
    48.     push    dwSize
    49.     push    edx
    50.     push    11              ; SystemModuleInformation
    51.     call    NtQuerySystemInformation
    52.     test    eax, eax
    53.     jnz _error         
    54.            
    55.     mov eax, [edx]._SMI.Base
    56.     mov dwBase, eax
    57.  
    58.     lea esi, [edx]._SMI.ImageName
    59.     mov edi, [edx]._SMI.ModuleNameOffset
    60.     add edi, esi
    61.  
    62.     mov szName, edi
    63.  
    64.  
    65.  
    66. _error:
    67.         ret
    68. read_sst    endp
    [edx]._SMI.Base = 90909090h <- это правильно?
    в szName не получает имя... :dntknw:
    в чем же проблема заключается?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Одно и тоже... Уже тошнит!
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ищи NativeAPI.pdf