Отец попросил помочь. Надо организовать удаленный дебаггинг. Смысл в следующем. Есть 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? Возможно подойдет отец и более детально разъяснит ситуацию.
Ну как же не помочь таким людям? Так мою несчастную энтропию ругать... Значит так, по поводу софта. Я тут немного подумал. Придумал только то, что есть 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): PUSHF ; Взять FLAGS из стека POP AX ; Запихнуть в AX OR AX, 100h ; Выставить твой любимый TF PUSH AX ; Эх... Все по новой! POPF ; Ур-р-ря! Где взять самый простенький дизассемблер, а точнее функцию BYTES TO ASCII-CODE? Блин! И эти вопросы задает тот, кто СИДИТ на этом форуме! Блин. Да ты поищи. Народ уже устал обсуждать!
Я тоже рад тебя видеть Не, я не того Извини, дебаггеров писать не приходилось Тоесть, на сколько я понял, после установки TF после каждой команды будет INT 1 вызываться? Извиняй - я не самый частый гость на форуме. Так как думаешь, в этом случае легче SoftIce для доса заюзать или все же своего дебаггера писать?
Тоесть, на сколько я понял, после установки TF после каждой команды будет INT 1 вызываться? Да. Следовательно, ты должен вновь и вновь выставлять этот несчастный флажок. Так как думаешь, в этом случае легче SoftIce для доса заюзать или все же своего дебаггера писать? Т.к. ты никогда не писал своего (а занятие это малоприятное - в особенности под DOS ), то заюзай, сперва, айс. Терять ты ничего не теряешь, а вот выиграть можешь очень и очень много.
Он что, "одноразовый" что ли? И кстати как сделать чтобы он не работал внутри обработчика? cli? А как чтобы после выставления в конце обработчика не сработал после iret? Это не DOS - там вообще операционки нет. Как выяснилось, нет и БИОСА. ПЗУ и есть тот код, который надо дебажить, на сколько я понял. Так айс сможет с двушкой по порту общаться? Там же нет операционки...
> Значит так, по поводу софта. Я тут немного подумал. > Придумал только то, что есть Soft-Ice 2.8 с каких пор он работает на 286? > Это не DOS - там вообще операционки нет. > Как выяснилось, нет и БИОСА. ПЗУ и есть тот код, > который надо дебажить, на сколько я понял. а возможность передать управление на свой код хоть есть? может легче будет снять дамп с ПЗУ и его отдизасмить? для 286 можно соорудить аппаратный отладчик - на тех тактовых частотах при наличии современной аппаратной базы это делается в общем-то элементарно.
kaspersky Похоже ситуация не ясна окончательно Отец занимается программированием разных девайсов. Вот для одного такого девайса ему надо писать проги. И для удобства ему нужна возможность дебажить СОБСТВЕННЫЕ проги. Да, это 286, но от 286-го там только ПРОЦЕССОР. И тот какой-то хитрый. Система команд та же, архитектура ВРОДЕ та же, но вот переферия вся бог знает какая. Материнку я тоже отношу к переферии. Тоесть надеюсь теперь ясно, что никакой дамп снимать не надо, потому что отец этот код сам же и пишет, вот только на PC его не запустить, потому что все что с PC у него (286) общего так это только процессор. Кстати, на этой двушке даже USB есть. Хирая она какая-то Соединяться можно только через порты (COM, LPT, USB). До меня сейчас начинает доходить, что по портам управляющие команды на уровне архитектуры ведь не пошлешь... Тоесть какой-то собственный резидент придется запихнуть в эту двушку. Тоесть наш резидент (int 1) будет что-то вроде: Код (Text): cli push dx mov dx,адрес порта out dx,ax out dx,bx out dx,cx out dx,word ptr [sp] ... ну и т.д. ... дальше отправляем код по адресу ss:[sp-2] (ip) ... стек ... и данные по желанию pop dx sti iret Так вот где тут установку TF надо воткнуть?
- а почему бы не написать программку-эмулятор этого "хитрого" 286 -го и на нем уже дебагить свои проги?
Zufyxe Ну писать эмулятор вообще ужас по сравнению с дебаггером. Софтварного эмулятора отец не нашел. Есть хардварный дебаггер, стоит 2000$. Надо будет узнать полное название этого проца, может что и можно будет найти...
_DEN_ Узнай точное название. 286 обычно во встроенных устройствах не применяют. Там или 186 или еще что-то. Софт-эмулятор для 186-го и многих других тоже есть. Я сам ,например ,свою прогу для 8051 отлаживаю на Пенте, но у меня простое железо. Только в такой постановке мы уже начинаем нарушать правила форума
Итак, проясняю ситуацию... Произошла типичная подмена понятий (C) Гоблин. На самом деле это 186 и вот ее полное название: AMD Am186 CC Если кто юзал удаленный дебаггинг - пожалста, поделитесь дебаггером, или хотя бы мыслями. На сколько я помню, защищенного или виртуального режимов на 186-м не было. Если все же дебаггера не найдется... volodya!!!, выручай! Поясни, если не лень, какие тонкости есть в пошаговом режиме (Trace Flag). Что ты имел ввиду под фразой "флаг придется устанавливать каждый раз"?? После INT 1 TF сбрасывается? Как ведет себя внутри обработчика?
> Если кто юзал удаленный дебаггинг - пожалста, поделитесь дебаггером, есть целый диск с кучей дебагеров для 186, говори куда залить? > Что ты имел ввиду под фразой "флаг придется устанавливать каждый раз"?? После INT 1 TF сбрасывается? именно! ведь это программное прерывание и cli на него не распростаняется, а ты ведь не хочешь, чтобы трассировочный обработчик рекурсивно трассировал сам себя? но установить прерывание при выходе из обработчика - не проблема. хуже, что 186 в ряде случаев теряет трассировочное прерывание, что требует дополнительных усилий от обработчика. подробности в любой книге по асму. > Как ведет себя внутри обработчика? в стеке ты имеешь флаги и дальний адрес возврата на следующую машинную команду, которую ты можешь дизасмить. дизасмиь предыдущую команду намного сложнее. в общем случае это вообще невозможно.
ведь это программное прерывание и cli на него не распростаняется Всмысле програмное? Можешь привести пример самого КОРОТКОГО трассировщика? Тоесть обработчик INT 1? Предыдущую комманду дизасмить не надо))
> Всмысле програмное? в смысле, что не аппаратное. > Можешь привести пример самого КОРОТКОГО трассировщика? > Тоесть обработчик INT 1? конечно могу. вот мой древний сорец, трассирующий вектора прерываний в поисках резидентных вирей с целью их идентификации и убиения. тут есть немного ощибок, но в целом все работает _843201463__XSAFE_IV.ZIP
kaspersky Хе-хе Ну и понятия о краткости В моем понятии "короткий" это установка вектора, корректный вход и корректный выход из резидента )) При 9-ти килобайтах ведь подумать придется, что лишнее, а что нет )) На самом деле спасибо. Ты там кстати .286 написал. На 186 заработает?
2 kaspersky М... насколько я помню, когда вызывается int не только первый но и все остальные, на стеке лежит дальний адрес возврата и регистр флагов.... При входе в обработчик флаги уже не те... кажись tf=0 и дебаггер сам себя не отлаживает. После того как мы вылезаем из обработчика флаги восстанавливаются и tf=1 и все ОК... Или я чего-то упустил? Объясните мне дураку зачем после каждого int 1 восстанавливать tf ?