Просветите в SoftIce

Тема в разделе "WASM.WIN32", создана пользователем VOOrDOOluck, 17 авг 2004.

  1. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Просветите в SoftIce

    Всем привет

    Ответь пожалуйста на пару вопросов:

    Во-первых Почему при активном айсе у меня незапускаются пдф файлы(акробат начинает инит и потом пропадает).Как это лечится.Ведь вся инфа по айсу(для начинающих)находится в пдф.

    Ну и во-вторых(чисто из интереса).Может кто знает как айс делает свои хуки(bpx)на такое большое количество системных функций(сервисов) или подскажите где про это можно почитать.Очень интересно узнать.

    Спасибо
     
  2. dragon

    dragon New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2002
    Сообщения:
    84
    Адрес:
    Питер
    акробат делает так: CreateFile("\\\\.\\NTICE", ...) и обнаруживает айса. Выход ставить iceext.
     
  3. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    dragon

    Что такое iceext и с чем его едят.



    P.S. И чем ему (ридеру)не нравится айс
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Если я правильно помню то по пути

    \Program Files\Adobe\Acrobat 5.0\Reader\plug_ins\InterTrust

    лежит плагин, который нужно удалить для решения проблемы :derisive:
     
  5. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Asterix

    Большооооооооое спасибо.Просто выручил от пожизненого гемора. Ж:)



    P.S.А как же насчет хуков
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    подскажите где про это можно почитать



    Нигде. Можно дизассемблировать ntice.sys и посмотреть самому.

    А как он это делает... Одни догадки :)
     
  7. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    volodya

    Одни догадки :)

    Тоже верно
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > Можно дизассемблировать ntice.sys



    Или взять уже готовый дизассемблированный :derisive:
     
  9. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Или взять уже готовый дизассемблированный :derisive:



    Зачем тебе дрова сорокалетней давности? Они ж уже испортились :)
     
  10. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Еще один до боли нужный вопрос.Как в айсе можно исправить page fault что бы система (возврате из айса) не глючила или не приходилось перезагружатся.



    P.S.пдф пока что по поиску пролистал там по этому вопросу (именно решение) ничего помойму нету.
     
  11. vaskovich

    vaskovich New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2004
    Сообщения:
    2
    Адрес:
    Samara
    Не понял вопрос, но может
    Код (Text):
    1. faults off
    поможет?
     
  12. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    vaskovich

    Это совсем нето.при faults on и page fault появлялся айс и при выходе из него все было нормально(правда система чуть подтормаживала),а при faults off ->BSOD->Reset.



    Суть вопроса: можно ли при page fault в айсе назначить как то обработчик (наподобие SEH)или может вызвать какуюто системную функцию по обработке page fault. Ведь сама система вызывает функции обработки для данной ошибки(помойму неэкспортируемую).А как мне быть если у меня такая ошибка в дровах.
     
  13. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Мда... Глубоко тебя понесло, Шарапов... Причем, судя по посту, то и сам не слишком в таких вещах разбираешься...



    Page Fault обрабаывается вектором в IDT - номер вектора - 14 (в 10-системе счисления). На языке Windows это пишется так:



    IDTEntry _KiTrap0E, D_INT032 ; E: Page Fault



    Код выглядит так:


    Код (Text):
    1.  
    2. ;++
    3. ;
    4. ; Routine Description:
    5. ;
    6. ;    Handle page fault.
    7. ;
    8. ;    The page fault occurs if paging is enabled and any one of the
    9. ;    conditions is true:
    10. ;
    11. ;    1. page not present
    12. ;    2. the faulting procedure does not have sufficient privilege to
    13. ;       access the indicated page.
    14. ;
    15. ;    For case 1, the referenced page will be loaded to memory and
    16. ;    execution continues.
    17. ;    For case 2, registered exception handler will be invoked with
    18. ;    appropriate error code (in most cases STATUS_ACCESS_VIOLATION)
    19. ;
    20. ;    N.B. It is assumed that no page fault is allowed during task
    21. ;    switches.
    22. ;
    23. ;    N.B. INTERRUPTS MUST REMAIN OFF UNTIL AFTER CR2 IS CAPTURED.
    24. ;
    25. ; Arguments:
    26. ;
    27. ;    Error code left on stack.
    28. ;    CR2 contains faulting address.
    29. ;    Interrupts are turned off at entry by use of an interrupt gate.
    30. ;
    31. ; Return value:
    32. ;
    33. ;    None
    34. ;
    35. ;--
    36.  
    37.         ASSUME  DS:NOTHING, SS:NOTHING, ES:NOTHING
    38.         ENTER_DR_ASSIST kite_a, kite_t, NoAbiosAssist
    39. align dword
    40.         public  _KiTrap0E
    41. _KiTrap0E       proc
    42.  
    43.         ENTER_TRAP      kite_a, kite_t
    44.  
    45. if FAST_V86_TRAP or FAST_BOP
    46.  
    47.         cmp     byte ptr PCR[PcVdmAlert], 0
    48.         jne     Kt0eVdmAlert
    49. endif
    50.  
    51.         VERIFY_BASE_TRAP_FRAME
    52.  
    53.         mov     edi,cr2
    54. ;
    55. ; Now that everything is in a sane state check for rest of the Pentium
    56. ; Processor bug work around for illegal operands
    57. ;
    58.  
    59.         cmp     _KiI386PentiumLockErrataPresent, 0
    60.         jne     PentiumTest              ; Check for special problems
    61.  
    62. NoPentiumFix:                            ; No.  Skip it
    63.         sti
    64.  
    65.  
    66.         test    [ebp]+TsEFlags, EFLAGS_INTERRUPT_MASK   ; faulted with
    67.         jz      Kt0e12b                 ; interrupts disabled?
    68. Kt0e01:
    69.  
    70. ;
    71. ; call _MmAccessFault to page in the not present page.  If the cause
    72. ; of the fault is 2, _MmAccessFault will return approriate error code
    73. ;
    74.  
    75.         sub     esp, 16
    76.         mov     eax,[ebp]+TsSegCs
    77.         and     eax,MODE_MASK           ; (eax) = arg3: PreviousMode
    78.         mov     [esp+12], ebp           ; pass in the trap frame base
    79.         mov     [esp+8], eax
    80.         mov     [esp+4], edi
    81.         mov     eax, [ebp]+TsErrCode    ; (eax)= error code
    82.         and     eax, ERR_0E_STORE       ; (eax)= 0 if fault caused by read
    83.                                         ;      = 2 if fault caused by write
    84.         shr     eax, 1                  ; (eax) = 0 if read fault, 1 if write fault
    85.         mov     [esp+0], eax            ; arg3: load/store indicator
    86.  
    87.         call    _MmAccessFault@16
    88.  
    89. if DEVL
    90.         cmp     _PsWatchEnabled,0
    91.         jz      short xxktskip
    92.         mov     ebx, [ebp]+TsEip
    93.         stdCall _PsWatchWorkingSet,<eax, ebx, edi>
    94. xxktskip:
    95. endif
    96.  
    97.         or      eax, eax                ; sucessful?
    98.         jge     Kt0e10                  ; yes, go exit
    99.  
    100.         mov     ecx,PCR[PcGdt]
    101.  
    102.         ; Form Ldt Base
    103.         movzx   ebx,byte ptr [ecx + KGDT_LDT].KgdtBaseHi
    104.         shl     ebx,8
    105.         or      bl,byte ptr [ecx + KGDT_LDT].KgdtBaseMid
    106.         shl     ebx,16
    107.         or      bx,word ptr [ecx + KGDT_LDT].KgdtBaseLow
    108.         or      ebx,ebx                 ; check for zero
    109.         jz      short Kt0e05            ; no ldt
    110.  
    111.         cmp     edi,ebx
    112.         jb      short Kt0e05            ; address not in LDT
    113.  
    114.         ; Form Ldt limit
    115.         movzx   edx,byte ptr [ecx + KGDT_LDT].KgdtLimitHi
    116.         and     edx,000000FFh
    117.         shl     edx,16
    118.         or      dx,word ptr [ecx + KGDT_LDT].KgdtLimitLow
    119.         add     ebx,edx
    120.         cmp     edi,ebx
    121.         jae     short Kt0e05            ; too high to be an ldt address
    122.  
    123.         sldt    cx                      ; Verify this process has an LDT
    124.         test    ecx, 0ffffh             ; Check CX
    125.         jz      short Kt0e05            ; If ZY, no LDT
    126.  
    127.         mov     eax, [ebp]+TsErrCode    ; (eax)= error code
    128.         and     eax, ERR_0E_STORE       ; (eax)= 0 if fault caused by read
    129.                                         ;      = 2 if fault caused by write
    130.         shr     eax, 1                  ; (eax) = 0 if read fault, 1 if write fault
    131.                                         ; call page fault handler
    132.         stdCall   _MmAccessFault, <eax, edi, 0, ebp>
    133.  
    134.         or      eax, eax                ; successful?
    135.         jge     Kt0e10                  ; if z, yes, go exit
    136.  
    137.         mov     ebx,[ebp]+TsSegCs       ; restore previous mode
    138.         and     ebx,MODE_MASK
    139.         mov     [esp + 8],ebx
    140.  
    141. ;
    142. ; Check to determine if the fault occured in the interlocked pop entry slist
    143. ; code. There is a case where a fault may occur in this code when the right
    144. ; set of circumstances occurs. The fault can be ignored by simply skipping
    145. ; the faulting instruction.
    146. ;
    147.  
    148. Kt0e05: mov     ecx, offset FLAT:ExpInterlockedPopEntrySListFault ; get pop code address
    149.         cmp     [ebp].TsEip, ecx        ; check if fault at pop code address
    150.         je      Kt0e10a                 ; if eq, skip faulting instruction
    151.  
    152. ;
    153. ;   Did the fault occur in KiSystemService while copying arguments from
    154. ;   user stack to kernel stack?
    155. ;
    156.  
    157.         mov     ecx, offset FLAT:KiSystemServiceCopyArguments
    158.         cmp     [ebp].TsEip, ecx
    159.         jne     short @f
    160.  
    161.         mov     ecx, [ebp].TsEbp        ; (eax)->TrapFrame of SysService
    162.         test    [ecx].TsSegCs, MODE_MASK
    163.         jz      short @f                ; caller of SysService is k mode, we
    164.                                         ; will let it bugchecked.
    165.         mov     [ebp].TsEip, offset FLAT:kss60
    166.         mov     eax, STATUS_ACCESS_VIOLATION
    167.         mov     [ebp].TsEax, eax
    168.         jmp     _KiExceptionExit
    169. @@:
    170.  
    171.         mov     ecx, [ebp]+TsErrCode    ; (ecx) = error code
    172.         and     ecx, ERR_0E_STORE       ; (ecx) = 0 if fault caused by read
    173.                                         ;         2 if fault caused by write
    174.         shr     ecx,1                   ; (ecx) = load/store indicator
    175. ;
    176. ;   Did the fault occur in a VDM?
    177. ;
    178.         test    dword ptr [ebp]+TsEFlags,EFLAGS_V86_MASK
    179.         jnz     Kt0e7
    180.  
    181. ;
    182. ;   Did the fault occur in a VDM while running in protected mode?
    183. ;
    184.  
    185.         mov     esi,PCR[PcPrcbData+PbCurrentThread]
    186.         mov     esi,[esi]+ThApcState+AsProcess
    187.         test    byte ptr [esi]+PrVdmFlag,0fh ; is this a vdm process?
    188.         jz      short Kt0e9             ; z -> not vdm
    189.  
    190.         test    dword ptr [ebp]+TsSegCs, MODE_MASK
    191.         jz      short kt0e8
    192.  
    193.         cmp     word ptr [ebp]+TsSegCs, KGDT_R3_CODE OR RPL_MASK
    194.         jz      kt0e9                   ; z -> not vdm
    195.  
    196. Kt0e7:  mov     esi, eax
    197.         stdCall _VdmDispatchPageFault, <ebp,ecx,edi>
    198.         test    al,0fh                  ; returns TRUE, if success
    199.         jnz     Kt0e11                  ; Exit,No need to call the debugger
    200.  
    201.         mov     eax, esi
    202.         jmp     short Kt0e9
    203.  
    204. Kt0e8:
    205. ;
    206. ;   Did the fault occur in our kernel VDM support code?
    207. ;   At this point, we know:
    208. ;      . Current process is VDM process
    209. ;      . this is a unresolvable pagefault
    210. ;      . the fault occurred in kernel mode.
    211. ;
    212.  
    213. ;
    214. ;   First make sure this is not pagefault at irql > 1
    215. ;   which should be bugchecked.
    216. ;
    217.  
    218.         cmp     eax, STATUS_IN_PAGE_ERROR or 10000000h
    219.         je      Kt0e12
    220.  
    221.         cmp     word ptr [ebp]+TsSegCs, KGDT_R0_CODE ; Did fault occur in kernel?
    222.         jnz     short Kt0e9             ; if nz, no, not ours
    223.  
    224.         cmp     PCR[PcExceptionList], EXCEPTION_CHAIN_END
    225.         jnz     short Kt0e9             ; there is at least a handler to
    226.                                         ; handle this exception
    227.  
    228.         mov     ebp, PCR[PcInitialStack]
    229.         xor     ecx, ecx                ; set to fault-at-read
    230.         sub     ebp, KTRAP_FRAME_LENGTH
    231.         mov     esp, ebp                ; clear stack (ebp)=(esp)->User trap frame
    232.         mov     esi, [ebp]+TsEip        ; (esi)-> faulting instruction
    233.         jmp     Kt0e9b                  ; go dispatching the exception to user
    234.  
    235. Kt0e9:
    236. ; Set up exception record and arguments and call _KiDispatchException
    237.         mov     esi, [ebp]+TsEip        ; (esi)-> faulting instruction
    238.  
    239.         cmp     eax, STATUS_ACCESS_VIOLATION ; dispatch access violation or
    240.         je      short Kt0e9b                 ; or in_page_error?
    241.  
    242.         cmp     eax, STATUS_GUARD_PAGE_VIOLATION
    243.         je      short Kt0e9b
    244.  
    245.         cmp     eax, STATUS_STACK_OVERFLOW
    246.         je      short Kt0e9b
    247.  
    248.  
    249. ;
    250. ; test to see if davec's reserved status code bit is set. If so, then bugchecka
    251. ;
    252.  
    253.         cmp     eax, STATUS_IN_PAGE_ERROR or 10000000h
    254.         je      Kt0e12                  ; bugchecka
    255.  
    256. ;
    257. ; (ecx) = ExceptionInfo 1
    258. ; (edi) = ExceptionInfo 2
    259. ; (eax) = ExceptionInfo 3
    260. ; (esi) -> Exception Addr
    261. ;
    262.  
    263.         mov     edx, ecx
    264.         mov     ebx, esi
    265.         mov     esi, edi
    266.         mov     ecx, 3
    267.         mov     edi, eax
    268.         mov     eax, STATUS_IN_PAGE_ERROR
    269.         call    CommonDispatchException ; Won't return
    270.  
    271. Kt0e9b:
    272.         mov     ebx, esi
    273.         mov     edx, ecx
    274.         mov     esi, edi
    275.         jmp     CommonDispatchException2Args ; Won't return
    276.  
    277. .FPO ( 0, 0, 0, 0, 0, FPO_TRAPFRAME )
    278.  
    279. ;
    280. ; The fault occured in the interlocked pop slist function and the faulting
    281. ; instruction should be skipped.
    282. ;
    283.  
    284. Kt0e10a:mov     ecx, offset FLAT:ExpInterlockedPopEntrySListResume ; get resume address
    285.         mov     [ebp].TsEip, ecx        ; set continuation address
    286.  
    287. Kt0e10:
    288.  
    289. if DEVL
    290.         mov     esp,ebp                 ; (esp) -> trap frame
    291.         test    _KdpOweBreakpoint, 1    ; do we have any owed breakpoints?
    292.         jz      _KiExceptionExit        ; No, all done
    293.  
    294.         stdCall _KdSetOwedBreakpoints   ; notify the debugger
    295. endif
    296.  
    297. Kt0e11: mov     esp,ebp                 ; (esp) -> trap frame
    298.         jmp     _KiExceptionExit        ; join common code
    299.  
    300.  
    301. Kt0e12:
    302.         stdCall _KeGetCurrentIrql       ; (eax) = OldIrql
    303. Kt0e12a:
    304.    lock inc     ds:_KiHardwareTrigger   ; trip hardware analyzer
    305.  
    306. ;
    307. ; bugcheck a, addr, irql, load/store, pc
    308. ;
    309.         mov     ecx, [ebp]+TsErrCode    ; (ecx)= error code
    310.         and     ecx, ERR_0E_STORE       ; (ecx)= 0 if fault caused by read
    311.         shr     ecx, 1                  ; (ecx) = 0 if read fault, 1 if write fault
    312.  
    313.         mov     esi, [ebp]+TsEip        ; [esi] = faulting instruction
    314.  
    315.         stdCall _KeBugCheckEx,<IRQL_NOT_LESS_OR_EQUAL,edi,eax,ecx,esi>
    316.  
    317. Kt0e12b:
    318.         ; In V86 mode with iopl allowed it is OK to handle
    319.         ; a page fault with interrupts disabled
    320.  
    321.         test    dword ptr [ebp]+TsEFlags, EFLAGS_V86_MASK
    322.         jz      short Kt0e12c
    323.  
    324.         cmp     _KeI386VdmIoplAllowed, 0
    325.         jnz     Kt0e01
    326.  
    327. Kt0e12c:
    328.         cmp     _KiFreezeFlag,0         ; during boot we can take
    329.         jnz     Kt0e01                  ; 'transistion failts' on the
    330.                                         ; debugger before it's been locked
    331.  
    332.         cmp     _KiBugCheckData, 0      ; If crashed, handle trap in
    333.         jnz     Kt0e01                  ; normal manner
    334.  
    335.  
    336.         mov     eax, 0ffh               ; OldIrql = -1
    337.         jmp     short Kt0e12a
    338.  
    339. if FAST_BOP or FAST_V86_TRAP
    340.  
    341. Kt0eVdmAlert:
    342.         ; If a page fault occured while we are in VDM alert mode (processing
    343.         ; v86 trap without building trap frame), we will restore all the
    344.         ; registers and return to its recovery routine which is stored in
    345.         ; the TsSegGs of original trap frame.
    346.         ;
    347.         mov     eax, PCR[PcVdmAlert]
    348.         mov     byte ptr PCR[PcVdmAlert], 0
    349.  
    350. IF FAST_V86_TRAP
    351.         cmp     al, 0Dh
    352.         jne     short @f
    353.  
    354.         mov     eax, offset FLAT:V86TrapDRecovery
    355.         jmp     short KtvaExit
    356.  
    357. @@:
    358.         cmp     al, 10h
    359.         jne     short @f
    360.  
    361.         mov     eax, offset FLAT:V86Trap10Recovery
    362.         jmp     short KtvaExit
    363.  
    364. @@:
    365. ENDIF   ; FAST_V86_TRAP
    366.  
    367. IF FAST_BOP
    368.         cmp     al, 6
    369.         jne     short @f
    370.  
    371.         mov     eax, offset FLAT:V86Trap6Recovery
    372.         jmp     short KtvaExit
    373.  
    374. @@:
    375. ENDIF   ; FAST_BOP
    376.  
    377.         mov     eax, [ebp].TsEip
    378. KtvaExit:
    379.         mov     [ebp].TsEip, eax
    380.         mov     esp,ebp                 ; (esp) -> trap frame
    381.         jmp     _KiExceptionExit        ; join common code
    382.  
    383. if DBG
    384. @@:     int 3
    385. endif
    386. ENDIF   ; FAST_BOP OR FAST_V86_TRAP
    387. _KiTrap0E       endp
    388.  




    Теперь посмотрим, что говорит нам айс.


    Код (Text):
    1. :idt
    2. Int   Type     Sel:Offset     Attributes Symbol/Owner
    3. ...
    4. 000E  IntG32   0008:80468E78  DPL=0  P   ntoskrnl!Kei386EoiHelper+28D2




    Ага, айс нам нагло врет, что хендлер расположен по 0008:80468E78... Проверим. Запускаем стороннюю утилиту-драйвер по дампу IDT. Смотрим:


    Код (Text):
    1. INT 0000000E Location: 00000008:804688F4 DPL: 00000000 Type: 32bit Interrupt Gate




    Хм-хм, ну... Кто-то паскудно определяет адреса, но для нас важно, что хендлер действительно НЕ перехвачен. Кстати, поставлена была опция faults off. Включаем faults on и повторяем idt еще раз. Ага! idt изменилась!


    Код (Text):
    1. INT 0000000E Location: 00000008:B99A5F22 DPL: 00000000 Type: 32bit Interrupt Gate




    Если отдать айсу команду mod, то можно видеть, что по тому адресу сидит драйвер айса, т.е. прерывание действительно перехвачено (кстати, вовсе не самым грамотным способом - кто ж так явно прерывания-то хватает!).

    Далее надо узнать базу ntice -


    Код (Text):
    1.  
    2. :mod ntice
    3. hMod Base     PEHeader Module Name      File Name
    4.      B98D3000 B98D30F0 NTice            \SystemRoot\System32\Drivers\NTice.SYS
    5.  




    Теперь вычитаем базу из полученного адреса и идем в гости дизассемблером. А можно и прямо в айсе.



    Словом, пилите Шура, пилите. А то у мя времени сейчас мало в этом разбираться...
     
  14. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
    VOOrDOOluck, в общем, если опустить все что написал выше volodya, то любой необработанный сбой страницы приводит в kernel-mode к вызову KeBugCheck, которая и выполняет все посмертные действия. Теоретически там конечно можно что-нибудь запатчить, чтобы система не ребутилась, но это чревато потерей данных - форматнутые винты и прочее. :)



    Поэтому обычно сбоев пытаются просто не допускать. :)
     
  15. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    VOOrDOOluck, в общем, если опустить все что написал выше volodya



    Хамите, сэ-э-эр? :)
     
  16. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Еще один до боли нужный вопрос.Как в айсе можно исправить page fault что бы система (возврате из айса) не глючила или не приходилось перезагружатся.



    Если pagefault "настоящий", т.е. не возникающий при выгрузке страницы системой, а именно из-за програмной ошибки, то можно рискнуть самому "исправить" ситуацию. Например, у жены 1эс валилась как-то - я поставил айс и научил жену исправлять eip на следующую команду :)



    Такое прокатит не всегда. В том случае был нулевой указатель, переданный в какую-то там интерфейсную функцию, которая посуществу нах никому не была нужна. В драйверах сложнее. Вообще-то можно вернуться из подпрограммы драйвера / вообще из драйвера, не выполняя инвалидные команды, манипулируя eip ориентируясь на то, что сидит в стеке или добиться того, чтобы система сама срубила драйвер как задачу (иногда же у нее это получается). Возможно, этого можно достичь "заменой" PageFault на GPF или UD.



    Это все были общее рассуждения, ни на что не претендую. Но теоретически задача должна иметь несложное решение. Вот откуда это следует. Допустим, Вы написали сами ось и к ней есть аналог Айса. Вы вываливаетесь в айс по pagefault, но Вы прекрасно знаете, что это был всего лишь call в какой-то там драйвер и знаете, как корректно исправить глюк "на лету".
     
  17. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Всем

    Век живи век учись.Спасибо.
     
  18. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
    > Хамите, сэ-э-эр? :)



    volodya, да нет, просто в данном случае ты очень подробно начал копать. В прочем, как и обычно. :) Думаю достаточно было сказать про манипулирование EIP и стеком, чтобы осветить суть вопроса. :)
     
  19. CARDINAL

    CARDINAL Member

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



    айяяй !!!! Наваравал исходникофф виндовозных, а теперь пальцы веером. Нехорошо !!! :)
     
  20. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    VOOrDOOluck



    Это просто : в ini-файле есть строчки типа:

    EXP=\SystemRoot\system32\kernel32.dll

    Можно и самому такие команды выдать. Тогда все экспортируемые функции можно указывать в командах BPX/B