Глюк с IDT

Тема в разделе "WASM.ASSEMBLER", создана пользователем mr_Infern0, 27 май 2007.

  1. mr_Infern0

    mr_Infern0 New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2007
    Сообщения:
    52
    Такая трабла - добавляю в IDT гейт, когда дёргаю прерывание - BSOD, в хендлере тока iretd.
    Код (Text):
    1.  cli
    2.  mov EAX, cr0
    3.  push EAX
    4.  and EAX, 0FFFEFFFFh
    5.  mov cr0, EAX
    6.  sidt IDT
    7.  mov EDX, IDT.Base
    8.  add EDX, 2A8h
    9.  lea ECX, IntHandler
    10.  mov IDT_DESC.LSW_Handler, CX
    11.  shr ECX, 16
    12.  mov IDT_DESC.Selector, CS
    13.  mov IDT_DESC.MSW_Handler, CX
    14.  mov IDT_DESC.Flags, 0E600h
    15.  lea EDI, IDT_DESC
    16.  mov EAX, [EDI]
    17.  mov [EDX], EAX
    18.  mov EAX, [EDI+4]
    19.  mov [EDX+4], EAX
    20.  pop EAX
    21.  mov cr0, EAX
    22.  sti
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    покажи структуру IDT_DESC, может с полями напутал.

    mov EAX, cr0
    push EAX
    and EAX, 0FFFEFFFFh
    mov cr0, EAX

    это сброс какого бита? влом смотреть
     
  3. mr_Infern0

    mr_Infern0 New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2007
    Сообщения:
    52
    Great
    вроде сброс WP в реестр лень лезть,

    type TIDT_DESC=packed record
    LSW_Handler: word;
    Selector: word;
    Flags: word;
    MSW_Handler: word;
    end;
    уж извиняйте прога на дельфе - Ring0Callback
     
  4. mr_Infern0

    mr_Infern0 New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2007
    Сообщения:
    52
    Great
    Всё нашёл баг, если кому интересно - в flags надо замутить бит D (т.е. 0EE00h).