SYSENTER

Тема в разделе "WASM.ASSEMBLER", создана пользователем dr_dred, 3 авг 2005.

  1. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    n0p

    У Руссиновича говорится о windows 2K. На стр. №31 упоминаются 2 версии ntoskrnl.exe, обычная и с поддержкой PAE (ntkrnlpa.exe). В дистрибе (2K Proffessional gold) нашел только такие файлы:

    NTKRNLMP.EX_ и NTOSKRNL.EX_

    hal'ов дейсвительно много:

    HAL.DL_ HALAACPI.DL_ HALACPI.DL_ HALAPIC.DL_ HALMACPI.DL_ HALMPS.DL_ HALSP.DL_
     
  2. dr_dred

    dr_dred Сергей

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

    Я понял почему... но не понял почему?



    исходный код такой:
    Код (Text):
    1. start:
    2.         push    31h
    3.         push    10h             ;MB_ICONHAND
    4.         mov     eax,1143h
    5.         push    offset _exit    ;не важно что здесь
    6.         push    offset _exit
    7.         mov     edx,esp
    8.         sysenter
    9.         _exit:
    10.         add     esp,12
    11.         ret
    12. end start




    ↓↓↓ один пищит, другой - нет. Вот вам задачка 8*)



    [​IMG] 1081028158__beep.zip
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    PsConvertToGuiThread не нравится, что user32 нет в импорте.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    dr_dred или даже S_T_A_S_ :)

    А откуда в beep1 взялся импорт на MessageBoxA? ведь в коде его нет. Или это масм его сам пихает?
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Про masm не знаю, я делал так:
    Код (Text):
    1.         format pe gui
    2.  
    3.         push    31h
    4.         push    10h             ;MB_ICONHAND
    5.         mov     eax,1143h
    6.         push    eax
    7.         push    @f
    8.         mov     edx,esp
    9.         sysenter
    10. @@:
    11.         add     esp,12
    12.         ret    
    13.        
    14.  
    15. align 4
    16. data import
    17.  
    18.         dd 0,0,0,rva user32,rva @f ; если это убрать, работать не будет
    19.         dd 0,0,0,0,0
    20.  
    21. @@:
    22. MessageBoxA     dd rva MessageBoxA$
    23.                 dd 0
    24.  
    25. user32          db 'user32',0
    26. MessageBoxA$    db 0,0,'MessageBoxA',0
    27.  
    28. end data
     
  6. dr_dred

    dr_dred Сергей

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

    S_T_A_S_

    Я делал в masm. На самом деле без user32.lib работать ничего не будет, а чтобы masm библиотеку подключил, нужно оттуда какую нибудь функцию вызвать, аля InitCommonControls. Когда до меня это дошло, сделал так:

    link /subsystem:windows /merge:.idata=.text, секции импорта не стало, а вызов MessageBox'а в шестнадцатеричном редакторе подтереть можно.



    Но все же masm тоже виноват. Иногда, после удаления вызова MessageBox'а и перекомпиляции ничего не перекомпилировывается, а остается в неизменном виде. Видимо это меня и смутило.
     
  7. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Booster

    Функции-переходники из ntdll имеют вид

    mov eax,<function-id>

    mov edx,7FFE0300h

    call edx ; !!! а не call dword ptr [edx]!!!

    ret n

    И далеко не все функции из ntdll являются переходниками к ядру.



    А по поводу выбора в винде между sysenter и int 2E: при загрузке определяются возможности процессора и в зависимости от них по 7FFE0300 копируется либо код с sysenter, либо с int 2E
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    diamond

    >call edx

    Да ты прав, но только для XP SP1 (ниже не проверял). В SP2 как раз
    Код (Text):
    1. call dword ptr [edx]
     
  9. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Вот часто я еще вижу в user32.dll еще int 2Bh. Это что?
     
  10. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Booster

    А что находится в edx и dword ptr [edx]?
     
  11. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Кстати здесь походу возможен один из методов перехвата фунок. Все функции в ntdll.dll имеют приблизительно такой вид:

    н у н у . п е р е х в а т т о в о з м о ж е н . н о л ю б о й а н т и р у т к и т э т о в ы п а л и т .
     
  12. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Здравствуйте! Понимаю, что тема изб(п)итая, однако вопросы все равно остались:
    1. Где уже НЕ работает метод вызова через int 2Eh ? Мне не важна скорость, важна лишь универсальность, можно ли вообще обойтись одним ТОЛЬКО int 2Eh в win2k3/win2k3 sp1, vista 32-bit ?
    2. В принципе хотелось бы использовать данный вызов для проверки наличия венды и получения ее версии (пока). Как это лучше сделать?
    3. Как я понял, номера некоторых системных вызовов постоянно меняются от версии к версии. Говорят, нужно прошарить ntdll.dll на предмет наличия нужного вызова/получения его номера. Однако как конкретно это делать, я пока не нашел. Если есть какой-нибудь пример, где это делается (на асме), подкиньте, пожалуйста ссылку или исходник.

    Заранее благодарю.
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    имхо, он должен работать везде для совместимости
     
  14. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Точно хотелось бы знать :)
    А то нехорошо получится, если где-то будет просто что-нибудь падать от такого способа %)
     
  15. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Да и какая в попу совместимость, если номера разные от версии к версии винды...
     
  16. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    номера разные, а способ доступа (INT) не меняется для совместимости
     
  17. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    А работает ли int 2eh из-под NTVDM? Попробовал метод, изложенный здесь, но нигде (WinXP/Win2k3) не получил ожидаемых кодов ошибок 0xС000001С (STATUS_INVALID_SYSTEM_SERVICE) или 0xC0000005 (STATUS_ACCESS_VIOLATION). Хотя я не использовал таких тонкостей как
    Код
    Код (Text):
    1.                 push    esi
    2.                 xor     esi, esi
    3.                 xor     edx, edx
    4.                 push    ds es fs gs
    5.                 int     2Eh                     ; Вызов шлюза
    6.                 nop                             ; При AV EIP изменяется на 8, а не 4 байта
    7.                 nop
    8.                 nop
    9.                 nop
    10.                 nop
    11.                 nop
    12.                 nop
    13.                 nop
    14.                 pop     gs fs es ds
    15.                 pop     esi
    16.                 ret
    При любом номере функции в EAX возвращается какое-то левое значение, не зависящее от номера функции, но на всех испробованных мной машинах оно разное.
    Работаю под управлением DOS/32A. Т.е. нахожусь в защищенном режиме. Пробовал вместо int 2eh вызывать имитацию прерывания V86 через функцию DPMI, но результат тот же.
    Что не так делаю?
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ykidia
    Можно тупой вопрос задать: ты хотябы из под винды заюзоть пытаешся ?
     
  19. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    [deleted]
     
  20. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Clerk
    Мой вопрос ранее был
    Вот оттуда ) Мой ответ будет зависеть от того, равносильны ли для Вас понятия из-под NTVDM и из под винды