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_
dr_dred Я понял почему... но не понял почему? исходный код такой: Code (Text): start: push 31h push 10h ;MB_ICONHAND mov eax,1143h push offset _exit ;не важно что здесь push offset _exit mov edx,esp sysenter _exit: add esp,12 ret end start ↓↓↓ один пищит, другой - нет. Вот вам задачка 8*) 1081028158__beep.zip
dr_dred или даже S_T_A_S_ А откуда в beep1 взялся импорт на MessageBoxA? ведь в коде его нет. Или это масм его сам пихает?
Про masm не знаю, я делал так: Code (Text): format pe gui push 31h push 10h ;MB_ICONHAND mov eax,1143h push eax push @f mov edx,esp sysenter @@: add esp,12 ret align 4 data import dd 0,0,0,rva user32,rva @f ; если это убрать, работать не будет dd 0,0,0,0,0 @@: MessageBoxA dd rva MessageBoxA$ dd 0 user32 db 'user32',0 MessageBoxA$ db 0,0,'MessageBoxA',0 end data
IceStudent S_T_A_S_ Я делал в masm. На самом деле без user32.lib работать ничего не будет, а чтобы masm библиотеку подключил, нужно оттуда какую нибудь функцию вызвать, аля InitCommonControls. Когда до меня это дошло, сделал так: link /subsystem:windows /merge:.idata=.text, секции импорта не стало, а вызов MessageBox'а в шестнадцатеричном редакторе подтереть можно. Но все же masm тоже виноват. Иногда, после удаления вызова MessageBox'а и перекомпиляции ничего не перекомпилировывается, а остается в неизменном виде. Видимо это меня и смутило.
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
diamond >call edx Да ты прав, но только для XP SP1 (ниже не проверял). В SP2 как раз Code (Text): call dword ptr [edx]
Кстати здесь походу возможен один из методов перехвата фунок. Все функции в ntdll.dll имеют приблизительно такой вид: н у н у . п е р е х в а т т о в о з м о ж е н . н о л ю б о й а н т и р у т к и т э т о в ы п а л и т .
Здравствуйте! Понимаю, что тема изб(п)итая, однако вопросы все равно остались: 1. Где уже НЕ работает метод вызова через int 2Eh ? Мне не важна скорость, важна лишь универсальность, можно ли вообще обойтись одним ТОЛЬКО int 2Eh в win2k3/win2k3 sp1, vista 32-bit ? 2. В принципе хотелось бы использовать данный вызов для проверки наличия венды и получения ее версии (пока). Как это лучше сделать? 3. Как я понял, номера некоторых системных вызовов постоянно меняются от версии к версии. Говорят, нужно прошарить ntdll.dll на предмет наличия нужного вызова/получения его номера. Однако как конкретно это делать, я пока не нашел. Если есть какой-нибудь пример, где это делается (на асме), подкиньте, пожалуйста ссылку или исходник. Заранее благодарю.
Точно хотелось бы знать А то нехорошо получится, если где-то будет просто что-нибудь падать от такого способа %)
А работает ли int 2eh из-под NTVDM? Попробовал метод, изложенный здесь, но нигде (WinXP/Win2k3) не получил ожидаемых кодов ошибок 0xС000001С (STATUS_INVALID_SYSTEM_SERVICE) или 0xC0000005 (STATUS_ACCESS_VIOLATION). Хотя я не использовал таких тонкостей как Код Code (Text): push esi xor esi, esi xor edx, edx push ds es fs gs int 2Eh ; Вызов шлюза nop ; При AV EIP изменяется на 8, а не 4 байта nop nop nop nop nop nop nop pop gs fs es ds pop esi ret При любом номере функции в EAX возвращается какое-то левое значение, не зависящее от номера функции, но на всех испробованных мной машинах оно разное. Работаю под управлением DOS/32A. Т.е. нахожусь в защищенном режиме. Пробовал вместо int 2eh вызывать имитацию прерывания V86 через функцию DPMI, но результат тот же. Что не так делаю?
Clerk Мой вопрос ранее был Вот оттуда ) Мой ответ будет зависеть от того, равносильны ли для Вас понятия из-под NTVDM и из под винды