ZwQuerySystemInformation... error?

Тема в разделе "WASM.BEGINNERS", создана пользователем Smith, 24 фев 2007.

  1. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    push PAGE_READWRITE
    push MEM_COMMIT+MEM_RESERVE
    push size
    push 0
    call [VirtualAlloc]
    mov [buffer], eax
    push 0
    push size
    push buffer
    push 5 ; ýòî íîìåð êàê ÿ âûÿñíèë SystemProcessAndThreadsInformation
    call [ZwQuerySystemInformation]
    ;mov [qwe],eax
    ;----------------------
    ;cmp eax,0
    test eax,eax
    jnz _exit

    после вызова ZwQuerySystemInformation в eax помещается C0000005, наскоко я знаю при удачном вызове в eax должен поместиться 0, что в этом коде не так?
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Код (Text):
    1. STATUS_ACCESS_VIOLATION          equ 0C0000005h
    А ты Debug-привилегии включил?

    С FASM не очень знаком, но:
    Код (Text):
    1. mov [buffer], eax
    может быть
    Код (Text):
    1. mov buffer, eax
    а ещё лучше
    Код (Text):
    1. push PAGE_READWRITE
    2. push MEM_COMMIT+MEM_RESERVE
    3. push size
    4. push 0
    5. call [VirtualAlloc]
    6. mov edi, eax
    7. push 0
    8. push size
    9. push edi
    10. push 5
    11. call [ZwQuerySystemInformation]
    и не забывай VirtualFree вызывать.
     
  3. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    ok, пасиб, буду пробовать
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    на чем пишешь?
    может, push [buffer] все таки
    за последние насколько дней уже раз пять видел аналогичные вопросы )
     
  5. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Nouzui, по ходу, первый раз был оригинальный вопрос, а потом все кому не лень начала повторять примеры из того топика, но не у всех получается.
     
  6. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include '%fasminc%\win32a.inc'
    4. ;------------------------------------------
    5. section '.data' data readable writable
    6. buffer dd ?
    7. size equ 16*1024
    8. ;------------------------------------------
    9. section '.code' code readable writable executable
    10. start:  
    11. push PAGE_READWRITE
    12. push MEM_COMMIT+MEM_RESERVE
    13. push size
    14. push 0
    15. call [VirtualAlloc]
    16. mov  edi, eax
    17. push 0
    18. push size
    19. push edi
    20. push 5  ; ýòî íîìåð êàê ÿ âûÿñíèë SystemProcessAndThreadsInformation
    21. call [ZwQuerySystemInformation]
    22. test eax,eax
    23. jnz _exit    ; прыгает на _exit, так что я хз, че не так
    24. ...
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ну а чему этот eax равен?
     
  8. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    eax=C0000004
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    видишь, уже прогресс )

    "The specified information record length does not match the length required for the specified information class."
     
  10. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Буфер маленький. Увеличить!
     
  11. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    thx2RamMerLabs
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Не за что! Вообще размер буфера лучше вычислять динамически.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    RamMerLabs
    угу. ставить N-ое число байт и увеличивать, пока не исчезнет статус c0000004
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Great
    lol...
    вообщет при c0000004 ZwQuerySystemInformation должна возвращать требуемый объем памяти через последний параметр
    а может и не должна... она же недокументированная вроде?
     
  15. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Nouzui, должна и возвращает. Но...
    Допустим, нужно передать условный массив структур (размер структуры = N), тогда
    ZwQuerySystemInformation возвратит требуемый размер в том случае, если указанный ей размер будет не менее N. Проверено.
     
  16. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    то есть, если передать ей 1, то она вернет c00000004, но ничего не запишет в последний аргумент?
     
  17. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Да. Надо передать минимальный размер передаваемой структуры.
     
  18. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    т.е. если ZwQuerySystemInformation возвращает ошибку, то в посл. параметре можно посмотреть скоко надо?
     
  19. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Да, но только, если тот размер, который ты уже передал 3-им параметром не меньше размера структуры, которую ты передаёшь (не массива структур, а только одной структуры.)
     
  20. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    RamMerLabs
    может, у тебя просто в этом случае возвращалось что-то вроде 0x80000002 (STATUS_DATATYPE_MISALIGNMENT)?