особенности одладки под дос и вин (сингл степ)

Тема в разделе "WASM.RESEARCH", создана пользователем doctor_Ice, 17 окт 2005.

  1. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    реверсю вот одну прогу под дос дпми. я прикрутил к ней логгер на сингл степе. запускаю значит под чистым досом + cwsdpmi снимаю лог. и снимаю лог с нее под вин xp sp2. сравнивая логи вот что я обнаружил



    кусок кода который рассматриваем



    ...

    .text:00064213 mov edx, [ebp+arg_0]

    .text:00064216 in al, dx

    .text:00064217 movzx eax, al

    ...



    теперь логи



    dos cwsdpmi



    ...

    eip: 64213

    LOG:

    DS: AF

    ES: AF

    EAX: 0

    EBX: 1000

    EDX: 260

    ECX: 0

    EDI: 115F9E

    ESI: 59B2

    EBP: 115EE0



    N233E6

    eip: 64216

    PortIn: 262 43



    N233E7

    eip: 64217

    LOG:

    DS: AF

    ES: AF

    EAX: 43

    EBX: 1000

    EDX: 262

    ECX: 0

    EDI: 115F9E

    ESI: 59B2

    EBP: 115EE0

    ...



    а теперь лог с вин ВНИМАНИЕ



    ...

    eip: 64213

    LOG:

    DS: 1AF

    ES: 1AF

    EAX: 0

    EBX: 2AD

    EDX: 260

    ECX: 0

    EDI: 11FF9E

    ESI: 59B2

    EBP: 11FEE0



    N2C05E

    eip: 64216

    PortIn: 262 FF



    N2C05F

    eip: 6421A

    LOG:

    DS: 1AF

    ES: 1AF

    EAX: FF

    EBX: 2AD

    EDX: 262

    ECX: 0

    EDI: 11FF9E

    ESI: 59B2

    EBP: 11FEE0

    ...



    вот так вот после аут та же фишка. интересно почему под виндами следующая за обращением к порту команда невидима для сингл степа?
     
  2. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    Осмелюсь предположить, что поскольку под виндой xp порты закрыты, то происходит исключение #GP(0) для эмуляции ввода из порта, а под чистым досом порты открыты и ничего не происходит - команда выполняется как есть. Таким образом реально команда out (как и in) под виндой может и не исполняться, а только эмулируется (смотря какой порт, конечно, но виртуализация оборудования это великая вещь), отсюда и "приколы" синглстепа - поток команд "разрывается" и 1 команда пропускается из исполнения (из-за исключения)... Под 0-м кольцом в винде такое происходить не должно, т.к. там все исполняется как есть и логгер должен отработать как и досе. Хотя может я в чем и не прав...
     
  3. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    наверное придется за все ин оуты пихать ф1.
     
  4. Chingachguk

    Chingachguk New Member

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