Hardware breakpoint под DOS

Тема в разделе "WASM.RESEARCH", создана пользователем Sh355, 23 авг 2004.

  1. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Вообщем есть досовая прога. В ней есть строка "Demo" в сегменте даных. Поиском в айсе строка находится, но адрес представлен в 32-битном виде и bpm на этот адрес нифига естессно не срабатывает. Подскажите, чем можно отловить момент обращения к строке?
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Надо чтобы был не 32-битный режим.

    Запустил Волкова под ICE - без проблем ищет по сегментам.

    Не забудь правильно подключиться :

    dldr.exe C:\vc\VC.COM

    Карта памяти : mapv86 .
     
  3. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Загружаю программу я как ты и сказал, через dldr. В окне кода все нормально, 16-битный режим. А в окне данных, где выпадает результат s 0 l -1 'Demo' режим 32-битный. Как его переключить в 16-бит? Пойду RTFM по айсу сделаю..
     
  4. valterg

    valterg Active Member

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



    Это только видимость. На самом деле там offset 16-битный. Попробовал на qbx.exe Помучился с командой s - хотя указываю длину больше 0FFFF - она ищет в 64 Кбайтах. Т.е. если у тебя хоть какой указан сегмент

    (не обязательно точно), то задавай bpm прямо по нему - все работает. Короче тебе повезло, что строчка в первые 64 Кб попала, а то и не нашел бы.
     
  5. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Хм. Там показывает 0010:00040542 примерно так. Или может иногда показать 0010:81025642. На 16 бит не очень похоже. И еще, как-то раз айс показал адрес данных как надо - с 16 битным сегментом и смещением. Я на радостях быстро поставил туда bpm. И какое же было мое удивление, когда после следующего запуска программы bpm просто пропал из списка бряков. В связи с чем остались два вопроса:

    1. Почему айс показывает то 16, то 32 бит в окне данных? От чего это может зависеть?

    2. Куда пропадает bpm, установленый в контексте 16-битной дос программы?
     
  6. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Вообщем, проблема решена d ds:0 и все заработало в 16-битном виде. И bpm заработал отлично тоже, правда почему-то не могу найти код из памяти в файле.
     
  7. valterg

    valterg Active Member

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



    А про relocate не забыл. Например, сall в другой сегмент выглядит так :

    call 0000:адрес ( в файле)

    call 2378:адрес ( в памяти)

    Ищи по командам без таких штучек.
     
  8. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Куда-то предыдущий пост пропал :dntknw:

    Вообщем разобрался, нашел код, дело было не в релоках, а в кривых руках. Дальше началось самое интересное - хардлок, и куча математичеких операций через int 35 (эмуляция сопроцессора), и int 3f непонятно в какой оверлей ведущий.. вообщем полная задница :)
     
  9. valterg

    valterg Active Member

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

    Они могли простой командой MOV подменить обработчик

    прерываний. Сначала проверь, кого они вызывают ?

    ДОС или кусок программы.
     
  10. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Код напичкан такой гадостью:

    seg003:5AE7 9A B0 01 92 3A call far ptr sub_3AAD0

    seg003:5AEC CD 35 46 B8 fld dword ptr [bp-48h] ; (emulator call)

    seg003:5AF0 CD 35 5E C0 fstp dword ptr [bp-40h] ; (emulator call)

    seg003:5AF4 CD 3D wait ; (emulator call)

    seg003:5AF6 9A F5 01 92 3A call far ptr sub_3AB15



    после прохождения call по trace over адреса меняются, если зайти туда по F8 то все виснет :) в самих call находится опкод команды int 3F и после него еще какой-то байт (номер процедуры, что ли). Вот тут я и погряз :)
     
  11. valterg

    valterg Active Member

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



    Похоже действительно плавающая арифметика. Очень муторное дело - я в свое время читал доки и пытался разбираться, но бросил. Но такая старая программа должна уже быть сломана или ты специально тренируешься ?

    Обычно я такие штуки преодолеваю так : смотрю результат.

    Результат-то скорее всего слово или меньше.

    В том куске, что ты привел, вообще все понятно

    переслали из одной ячейки( fld - fload load)

    в другую (fst - Fl.store). И т.д.

    Конечно муторно это...
     
  12. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56


    Не, прога специфичная и не сломана еще никем. Есть желание поглядеть - намылю. меньше двух метров весит. Если тупо поправить джамп после результата, она честно пишет "Full version" и виснет напрочь :)
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Скинь на valterg@inbox.ru

    Может справлюсь. У меня тяжелее программа и для разминки сгодится.
     
  14. valterg

    valterg Active Member

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



    Есть небольшие успехи в ковырянии. Смотри почту и желательно знать, что за ключ ?