sysenter&int2e&wxp

Тема в разделе "WASM.WIN32", создана пользователем Saint German, 18 авг 2005.

  1. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    Утверждения верные?



    1. Если процессор не поддерживает команды sysenter/sysexit, используется int2e.



    2. процессор поддерживает syscall/sysret && sysenter/sysexit, но wxp, использует

    sysenter.



    3. wxpsp1 позволяет вызывать сист. сервисы int2e&sysenter,

    но sp2 нет.



    Прилагаю исходник, и у кого есть возможность - проверьте это, если есть у кого такой зверь AMD K6 за него будет особая благодарность.







    [​IMG] _689752069__loader.asm
     
  2. yuzvir

    yuzvir New Member

    Публикаций:
    0
    Регистрация:
    20 май 2005
    Сообщения:
    97
    XP SP2

    свалился вот здесь ...
    Код (Text):
    1.  
    2. mov     edx,7ffe0300h
    3. call    edx
    4.  


    Там что такое планировалось выполнить?
     
  3. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    да я просто забыл, что у меня (sp1) там нах

    mov edx, esp

    sysenter

    ret

    а в sp2, нет по этому адрессу, переделай сурс
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Пример кода, который вызывает MessageBeep через syscall и int 2E. Проверено на XPSP2
    Код (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. @@:     add     esp, 12
    11.  
    12.         push    1000
    13.         call    [Sleep]
    14.  
    15.         push    31h
    16.         push    10h
    17.         mov     eax, 1143h
    18.         push    eax
    19.         push    eax
    20.         lea     edx, [esp+8]
    21.         int     2Eh
    22.         add     esp, 16
    23.        
    24.         ret    
    25.  
    26. align 4
    27. data import
    28.  
    29.         dd 0,0,0,rva kernel32,rva k32i
    30.         dd 0,0,0,rva user32,rva u32i
    31.         dd 0,0,0,0,0
    32.  
    33. k32i:
    34. Sleep           dd rva Sleep$
    35.                 dd 0
    36.  
    37. u32i:
    38. MessageBoxA     dd rva MessageBoxA$
    39.                 dd 0
    40.  
    41. kernel32        db 'kernel32',0
    42. Sleep$          db 0,0,'Sleep',0
    43.  
    44. user32          db 'user32',0
    45. MessageBoxA$    db 0,0,'MessageBoxA',0
    46.  
    47. end data




    [​IMG] _1650674312__messagebeep.exe
     
  5. yuzvir

    yuzvir New Member

    Публикаций:
    0
    Регистрация:
    20 май 2005
    Сообщения:
    97
    т.е. должен выполниться ntdll.KiFastSystemCall (в XP SP2 7C90EB8Bh)?

    Если я правильно подправил, то все работает :)

    Тестировал на AMD Athlon XP 1800+
     
  6. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    yuzvir

    да я знаю, что работает, у тебя k7, мне итересно посмотреть на k6, и понять, почему если мой процессор поддерживает команды syscall/sysret, но при вызове их говорит, что "неверная инструкция". Может забить и принять, что на k6, никто не станет ставить wxp&hi?
     
  7. S_T_A_S_

    S_T_A_S_ New Member

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




    Дык а чем int 2E не устраивает? Будет работать и на XPSP2.
     
  8. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    всем меня int2e устраивает, только не устраивает, что можно вызвать сист. сервис, двумя способами, в w2k запатчик обраб. прерывание и хорошо, а wxp надо и int2e&sysenter, а по-хорошему еще и syscall
     
  9. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Saint German

    у меня к6 , всё работает, и SP2. В самом начале инсталяции проверяется, поддерживает ли процессор Syscall/sysret , sysenter/sysexit, если да, то впихивается версия NTDLL.DLL, в которой эти инструкции содержатся, в ntoskrnl.exe, к примеру, посмотри в конец KiSystemService, там идёт выявление фичей проца на поодержку данных инструкций, и далее развитие по ситуации. так что ни каких проблем тутне видится )
     
  10. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    >Дык а чем int 2E не устраивает? Будет работать и на XPSP2.

    Медленный он очень ))
     
  11. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    Блин, вопрос в том, какие-такие ситуации, у тебя k6 поддерживает sysenter?, а можно вызвать с помощью syscall?
     
  12. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    посмотрю вечером. По дате изготовления вообще то должен
     
  13. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    А если не поддерживает? то int2e использует или sysenter?
     
  14. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    k6-2 sysenter не поддерживает