Удаленный дебаггинг

Тема в разделе "WASM.ASSEMBLER", создана пользователем _DEN_, 6 сен 2004.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Отец попросил помочь.



    Надо организовать удаленный дебаггинг. Смысл в следующем. Есть 286-ая, а точнее от 286-й там только процессор, преферия отношения к PC на сколько я понял не имеет. BIOS тоже бог знает какой. Надо дебажить некий код на этой 286-й, но делать это удаленно. Тоесть у нас есть обычная PC с виндой, соединенная с этой двушкой через COM, LPT или что-то там еще. Окно дебаггера должно быть на PC, исполнимый код на двушке. Должны быть функции: просмотр регистров, просмотр стека, просмотр дизасемблированного кода, step into, step over, go to cursor. И клиентскую (PC) часть и серверную (286) похоже придется писать самому (самим). На сколько я понял - процессор работает в реальном режиме, хотя могу ошибаться. Отсюда несколько вопросов:



    1. Может все же есть софт, который сможет помочь? Или все самим делать придется?



    2. У меня пока одна идея: перевести процессор 286 в Trace Mode и на 3-е прерывание повесить прогу, которая будет отслеживать необходимую точку останова, поймав которую отправлять через какой-нибудь порт содержимое регистров, стека и т.д. Вот только я не совсем понял, как перевести проц в Trace Mode. В одной литературе сказано, что надо выставить Trace Flag в регистре FLAGS, в другой - вызвать первое прерывание. Что же на самом деле и какой по счету флаг TF в регистре FLAGS?



    3. Где взять самый простенький дизассемблер, а точнее функцию BYTES TO ASCII-CODE?



    Возможно подойдет отец и более детально разъяснит ситуацию.
     
  2. volodya

    volodya wasm.ru

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



    Значит так, по поводу софта. Я тут немного подумал. Придумал только то, что есть Soft-Ice 2.8 (да! да! - самый лучший отладчик под DOS!).

    Есть под него мануальчик:

    http://frontline.compuware.com/nashua/doc/DS/DOS/SIUG.pdf



    Дык в мануальчике написано, что есть такая фича как remote debugging - страничка 189. Ты почитай. Если не знаешь, где айс 2.8 достать - то в открытую помочь не смогу, т.к. негоже свои же правила нарушать. В приват пиши. Дам.



    286 в Trace Mode и на 3-е прерывание повесить прогу



    Э-э-э.. Ты это, случаем не того? При чем тут TF к int 3? TF - это int 1. Выставить-то флажок просто... Чего уж тут...


    Код (Text):
    1.  
    2. PUSHF          ; Взять FLAGS из стека
    3. POP     AX     ; Запихнуть в AX
    4. OR AX, 100h    ; Выставить твой любимый TF
    5. PUSH AX        ; Эх... Все по новой!
    6. POPF           ; Ур-р-ря!
    7.  




    Где взять самый простенький дизассемблер, а точнее функцию BYTES TO ASCII-CODE?





    Блин! И эти вопросы задает тот, кто СИДИТ на этом форуме! Блин. Да ты поищи. Народ уже устал обсуждать!
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Я тоже рад тебя видеть :)



    Не, я не того :) Извини, дебаггеров писать не приходилось :) Тоесть, на сколько я понял, после установки TF после каждой команды будет INT 1 вызываться?



    Извиняй - я не самый частый гость на форуме. Так как думаешь, в этом случае легче SoftIce для доса заюзать или все же своего дебаггера писать?
     
  4. volodya

    volodya wasm.ru

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



    Да. Следовательно, ты должен вновь и вновь выставлять этот несчастный флажок.



    Так как думаешь, в этом случае легче SoftIce для доса заюзать или все же своего дебаггера писать?





    Т.к. ты никогда не писал своего (а занятие это малоприятное - в особенности под DOS :)), то заюзай, сперва, айс. Терять ты ничего не теряешь, а вот выиграть можешь очень и очень много.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан




    Он что, "одноразовый" что ли? И кстати как сделать чтобы он не работал внутри обработчика? cli? А как чтобы после выставления в конце обработчика не сработал после iret?







    Это не DOS - там вообще операционки нет. Как выяснилось, нет и БИОСА. ПЗУ и есть тот код, который надо дебажить, на сколько я понял.





    Так айс сможет с двушкой по порту общаться? Там же нет операционки...
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > Значит так, по поводу софта. Я тут немного подумал.

    > Придумал только то, что есть Soft-Ice 2.8

    с каких пор он работает на 286?



    > Это не DOS - там вообще операционки нет.

    > Как выяснилось, нет и БИОСА. ПЗУ и есть тот код,

    > который надо дебажить, на сколько я понял.

    а возможность передать управление на свой код хоть есть?

    может легче будет снять дамп с ПЗУ и его отдизасмить?

    для 286 можно соорудить аппаратный отладчик - на тех тактовых частотах при наличии современной аппаратной базы это делается в общем-то элементарно.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    kaspersky



    Похоже ситуация не ясна окончательно :)



    Отец занимается программированием разных девайсов. Вот для одного такого девайса ему надо писать проги. И для удобства ему нужна возможность дебажить СОБСТВЕННЫЕ проги. Да, это 286, но от 286-го там только ПРОЦЕССОР. И тот какой-то хитрый. Система команд та же, архитектура ВРОДЕ та же, но вот переферия вся бог знает какая. Материнку я тоже отношу к переферии.



    Тоесть надеюсь теперь ясно, что никакой дамп снимать не надо, потому что отец этот код сам же и пишет, вот только на PC его не запустить, потому что все что с PC у него (286) общего так это только процессор. Кстати, на этой двушке даже USB есть. Хирая она какая-то :)



    Соединяться можно только через порты (COM, LPT, USB). До меня сейчас начинает доходить, что по портам управляющие команды на уровне архитектуры ведь не пошлешь... Тоесть какой-то собственный резидент придется запихнуть в эту двушку.



    Тоесть наш резидент (int 1) будет что-то вроде:
    Код (Text):
    1.  
    2. cli
    3. push dx
    4. mov dx,адрес порта
    5. out dx,ax
    6. out dx,bx
    7. out dx,cx
    8. out dx,word ptr [sp]
    9. ... ну и т.д.
    10. ... дальше отправляем код по адресу ss:[sp-2] (ip)
    11. ... стек
    12. ... и данные по желанию
    13. pop dx
    14. sti
    15. iret
    16.  




    Так вот где тут установку TF надо воткнуть?
     
  8. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia


    - а почему бы не написать программку-эмулятор этого "хитрого" 286 -го и на нем уже дебагить свои проги?
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Zufyxe

    Ну писать эмулятор вообще ужас по сравнению с дебаггером. Софтварного эмулятора отец не нашел. Есть хардварный дебаггер, стоит 2000$. Надо будет узнать полное название этого проца, может что и можно будет найти...
     
  10. valterg

    valterg Active Member

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



    Узнай точное название. 286 обычно во встроенных устройствах не применяют. Там или 186 или еще что-то.

    Софт-эмулятор для 186-го и многих других тоже есть.

    Я сам ,например ,свою прогу для 8051 отлаживаю на Пенте, но у меня простое железо.

    Только в такой постановке мы уже начинаем нарушать правила форума :)
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Итак, проясняю ситуацию...



    Произошла типичная подмена понятий :) (C) Гоблин.



    На самом деле это 186 и вот ее полное название:



    AMD Am186 CC



    Если кто юзал удаленный дебаггинг - пожалста, поделитесь дебаггером, или хотя бы мыслями. На сколько я помню, защищенного или виртуального режимов на 186-м не было. Если все же дебаггера не найдется...



    volodya!!!, выручай! :)

    Поясни, если не лень, какие тонкости есть в пошаговом режиме (Trace Flag). Что ты имел ввиду под фразой "флаг придется устанавливать каждый раз"?? После INT 1 TF сбрасывается? Как ведет себя внутри обработчика?
     
  12. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > Если кто юзал удаленный дебаггинг - пожалста, поделитесь дебаггером,

    есть целый диск с кучей дебагеров для 186, говори куда залить?



    > Что ты имел ввиду под фразой "флаг придется устанавливать каждый раз"?? После INT 1 TF сбрасывается?

    именно! ведь это программное прерывание и cli на него не распростаняется, а ты ведь не хочешь, чтобы трассировочный обработчик рекурсивно трассировал сам себя? но установить прерывание при выходе из обработчика - не проблема. хуже, что 186 в ряде случаев теряет трассировочное прерывание, что требует дополнительных усилий от обработчика. подробности в любой книге по асму.



    > Как ведет себя внутри обработчика?

    в стеке ты имеешь флаги и дальний адрес возврата на следующую машинную команду, которую ты можешь дизасмить. дизасмиь предыдущую команду намного сложнее. в общем случае это вообще невозможно.
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    ведь это программное прерывание и cli на него не распростаняется



    Всмысле програмное?

    Можешь привести пример самого КОРОТКОГО трассировщика? Тоесть обработчик INT 1?



    Предыдущую комманду дизасмить не надо))
     
  14. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > Всмысле програмное?

    в смысле, что не аппаратное.



    > Можешь привести пример самого КОРОТКОГО трассировщика?

    > Тоесть обработчик INT 1?

    конечно могу. вот мой древний сорец, трассирующий вектора прерываний в поисках резидентных вирей с целью их идентификации и убиения. тут есть немного ощибок, но в целом все работает ;)



    [​IMG] _843201463__XSAFE_IV.ZIP
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    kaspersky

    Хе-хе :) Ну и понятия о краткости :)

    В моем понятии "короткий" это установка вектора, корректный вход и корректный выход из резидента :))) При 9-ти килобайтах ведь подумать придется, что лишнее, а что нет :)))



    На самом деле спасибо.



    Ты там кстати .286 написал. На 186 заработает?
     
  16. Inked Wedge

    Inked Wedge New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2004
    Сообщения:
    33
    Адрес:
    Ukraine
    2 kaspersky







    М... насколько я помню, когда вызывается int не только первый но и все остальные, на стеке лежит дальний адрес возврата и регистр флагов.... При входе в обработчик флаги уже не те... кажись tf=0 и дебаггер сам себя не отлаживает. После того как мы вылезаем из обработчика флаги восстанавливаются и tf=1 и все ОК...



    Или я чего-то упустил? Объясните мне дураку зачем после каждого int 1 восстанавливать tf ?
     
  17. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Inked Wedge





    И мне тоже! :)