Способ повесить систему.

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Способ повесить систему.

Сообщение iGrok » 25.03.2009 (Ср) 20:38

ANDLL писал(а):iGrok
Ну если правда, то это баг эмуляции. Хотелось бы увидеть именно код который выполняется без эмулятора MS-DOS

Ок. Не вопрос. =)

Вот fasm'овый исходник. Взят стандартный темплейт Win-приложения, и на окончание обработки MessageLoop перед ExitProcess повешен "смертельный цикл".. XP при закрытии окна выдаёт "недопустимую операцию". А вот Win98 - виснет намертво. В аттаче - скомпиленный под FASMW 1.56 экзешник. Только что проверил на v4.10.1998 и на XPsp2.

Собственно, почему эффект должен был хоть чем-то отличаться от режима DOS, если Win98, как и 95 и все предыдущие (исключая NT-линейку) это фактически надстройка над DOS, а не полноценная самостоятельная система (тут утрирую, согласен)?
Код: Выделить всё
format PE GUI 4.0
entry start

include 'd:\Program\FASM_1.56\INCLUDE\win32a.inc'

section '.data' data readable writeable

  _title db 'Win32 program template',0
  _class db 'FASMWIN32',0

  mainhwnd dd ?
  hinstance dd ?

  msg MSG
  wc WNDCLASS

section '.code' code readable executable

  start:

        invoke  GetModuleHandle,0
        mov     [hinstance],eax
        invoke  LoadIcon,0,IDI_APPLICATION
        mov     [wc.hIcon],eax
        invoke  LoadCursor,0,IDC_ARROW
        mov     [wc.hCursor],eax
        mov     [wc.style],0
        mov     [wc.lpfnWndProc],WindowProc
        mov     [wc.cbClsExtra],0
        mov     [wc.cbWndExtra],0
        mov     eax,[hinstance]
        mov     [wc.hInstance],eax
        mov     [wc.hbrBackground],COLOR_BTNFACE+1
        mov     [wc.lpszMenuName],0
        mov     [wc.lpszClassName],_class
        invoke  RegisterClass,wc

        invoke  CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,192,192,NULL,NULL,[hinstance],NULL
        mov     [mainhwnd],eax

  msg_loop:
        invoke  GetMessage,msg,NULL,0,0
        or      eax,eax
        jz      end_loop
        invoke  TranslateMessage,msg
        invoke  DispatchMessage,msg
        jmp     msg_loop

  end_loop:
; начало смертельного цикла
        cli
        jmp end_loop
; конец смертельного цикла
        invoke  ExitProcess,[msg.wParam]

proc WindowProc, hwnd,wmsg,wparam,lparam
        push    ebx esi edi
        cmp     [wmsg],WM_DESTROY
        je      wmdestroy
  defwndproc:
        invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
        jmp     finish
  wmdestroy:
        invoke  PostQuitMessage,0
        xor     eax,eax
  finish:
        pop     edi esi ebx
        return
endp

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'

  import kernel,\
         GetModuleHandle,'GetModuleHandleA',\
         ExitProcess,'ExitProcess'

  import user,\
         RegisterClass,'RegisterClassA',\
         CreateWindowEx,'CreateWindowExA',\
         DefWindowProc,'DefWindowProcA',\
         GetMessage,'GetMessageA',\
         TranslateMessage,'TranslateMessage',\
         DispatchMessage,'DispatchMessageA',\
         LoadCursor,'LoadCursorA',\
         LoadIcon,'LoadIconA',\
         PostQuitMessage,'PostQuitMessage'
Вложения
f_killer.zip
(742 байт) Скачиваний: 44
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Способ повесить систему.

Сообщение ANDLL » 25.03.2009 (Ср) 21:13

тут утрирую, согласе
Тут херь, списанная со слов людей для которых любое черное поле с белыми буквами - DOS
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Способ повесить систему.

Сообщение iGrok » 25.03.2009 (Ср) 21:50

ANDLL писал(а):
тут утрирую, согласен
Тут херь, списанная со слов людей для которых любое черное поле с белыми буквами - DOS

Ок. Это моё личное заблуждение.

Но вопрос не в этом. Моя подпись таки вешает Win9x намертво. Ч.т.д.
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Способ повесить систему.

Сообщение ANDLL » 25.03.2009 (Ср) 22:06

А вот такой код вешает:
cli
l: jmp l
?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Способ повесить систему.

Сообщение iGrok » 25.03.2009 (Ср) 22:42

ANDLL писал(а):А вот такой код вешает:
cli
l: jmp l
?

Ща потестим.

UPD:
Да. Всё так же точно. А если убрать cli - то всё в порядке. Не вешается, не выдаёт ошибок.. Точнее, как.. Процесс остаётся висеть и грузить проц. Но снять его - как нефиг.
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Способ повесить систему.

Сообщение ANDLL » 26.03.2009 (Чт) 12:12

Ну блин. Собственно - в 98 винде работают in\out и вообще все привилегированные инструкции. Судя по всему никакого ограничения на этот счет там нету....
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Способ повесить систему.

Сообщение ANDLL » 26.03.2009 (Чт) 12:25

А тебя не затруднит глянуть и написать сюда значение CR0?
А то у меня под рукой ее нету
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Способ повесить систему.

Сообщение iGrok » 26.03.2009 (Чт) 13:10

ANDLL писал(а):А тебя не затруднит глянуть и написать сюда значение CR0?
А то у меня под рукой ее нету

Если я ничего не перепутал, то в Win98 у меня прочитался CR0 = 6..
При попытке получения значения cr0 под XP получаем ту же самую "недопустимую операцию".

ANDLL писал(а):Ну блин. Собственно - в 98 винде работают in\out и вообще все привилегированные инструкции. Судя по всему никакого ограничения на этот счет там нету....

Ну вроде бы да. Ещё там, ЕМНИП, можно спокойно писать в память любого процесса.. И я не уверен, что от этого защищено ядро и драйвера. По крайней мере, после попытки записи какой-нибудь муры в адрес из 4го гигабайта (если удачно попасть с адресом), можно было тоже убить систему. GPF, все дела..
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Способ повесить систему.

Сообщение ANDLL » 27.03.2009 (Пт) 1:52

Ерунда какая то в вашем windows 98
Попробовал сам
Если читать CR0 - какая то хрень которая даже не всегда воспроизводится.
Если перезаписать CR3, то система работает(о чудо). Но если потом прочитать его то получается что ничего там и не перезаписано.
В общем видимо привилегированные инструкции под win98 не выполняются, просто эксепшены както странно обрабатываются
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Пред.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList