Утверждения верные? 1. Если процессор не поддерживает команды sysenter/sysexit, используется int2e. 2. процессор поддерживает syscall/sysret && sysenter/sysexit, но wxp, использует sysenter. 3. wxpsp1 позволяет вызывать сист. сервисы int2e&sysenter, но sp2 нет. Прилагаю исходник, и у кого есть возможность - проверьте это, если есть у кого такой зверь AMD K6 за него будет особая благодарность. _689752069__loader.asm
XP SP2 свалился вот здесь ... Код (Text): mov edx,7ffe0300h call edx Там что такое планировалось выполнить?
да я просто забыл, что у меня (sp1) там нах mov edx, esp sysenter ret а в sp2, нет по этому адрессу, переделай сурс
Пример кода, который вызывает MessageBeep через syscall и int 2E. Проверено на XPSP2 Код (Text): format pe gui push 31h push 10h ;MB_ICONHAND mov eax, 1143h push eax push @f mov edx, esp sysenter @@: add esp, 12 push 1000 call [Sleep] push 31h push 10h mov eax, 1143h push eax push eax lea edx, [esp+8] int 2Eh add esp, 16 ret align 4 data import dd 0,0,0,rva kernel32,rva k32i dd 0,0,0,rva user32,rva u32i dd 0,0,0,0,0 k32i: Sleep dd rva Sleep$ dd 0 u32i: MessageBoxA dd rva MessageBoxA$ dd 0 kernel32 db 'kernel32',0 Sleep$ db 0,0,'Sleep',0 user32 db 'user32',0 MessageBoxA$ db 0,0,'MessageBoxA',0 end data _1650674312__messagebeep.exe
т.е. должен выполниться ntdll.KiFastSystemCall (в XP SP2 7C90EB8Bh)? Если я правильно подправил, то все работает Тестировал на AMD Athlon XP 1800+
yuzvir да я знаю, что работает, у тебя k7, мне итересно посмотреть на k6, и понять, почему если мой процессор поддерживает команды syscall/sysret, но при вызове их говорит, что "неверная инструкция". Может забить и принять, что на k6, никто не станет ставить wxp&hi?
всем меня int2e устраивает, только не устраивает, что можно вызвать сист. сервис, двумя способами, в w2k запатчик обраб. прерывание и хорошо, а wxp надо и int2e&sysenter, а по-хорошему еще и syscall
Saint German у меня к6 , всё работает, и SP2. В самом начале инсталяции проверяется, поддерживает ли процессор Syscall/sysret , sysenter/sysexit, если да, то впихивается версия NTDLL.DLL, в которой эти инструкции содержатся, в ntoskrnl.exe, к примеру, посмотри в конец KiSystemService, там идёт выявление фичей проца на поодержку данных инструкций, и далее развитие по ситуации. так что ни каких проблем тутне видится )
Блин, вопрос в том, какие-такие ситуации, у тебя k6 поддерживает sysenter?, а можно вызвать с помощью syscall?