Интересует вопрос - возможна ли отладка программ, исполняюшихся на интеловском проце, помимо обычных вариантов с программными отладчиками? Т.е. какой-либо интерфейс, позволяющий цепляться прямо на шину. Что-то типа JTAG на микроконтроллерах. И еще - есть ли такая фигня в 64-разрядных процах?
чето либо я вас не пойму, либо одно из двух. имею ввиду следующее: нек-рое аппаратное устройство, которое цепляется к cpu через какой-то интерфейс и с пом. к-рого можно производить отладку исполнения/чтения/записи памяти и т.п.
Broken Sword Цитата из книжки "Процессоры Pentium 3, Athion и другие": Все процессоры Pentium имеют средства SMM, возможности которых расширялись по мере появления новых моделей. Средства тестирования включают возможность выполнения встроенного теста BIST (Built-In Self Test), обеспечивающего выявление ошибок микрокодов и программируемых логических матриц, тестирование кэш-памяти инструкций и данных, буфера страничной переадресации и ROM. Все процессоры имеют стандартный тестовый порт IEEE 1149.1, позволяющий тестировать их с помощью интерфейса JTAG. Ну а конкретное описание наверно на сайте интела нужно искать.
Black_mirror Удалённая отладка (через сеть или COM-порт) посредством WinDbg слегка напоминает работу с JTAG...
Я действительно слишком туманно выразился. Хочется узнать немного не о том. В обычных настольных системах отладчик тесно работает в среде ОС и исполняемой программы. Т.е. защита исполняемой программы может как угодно влиять на отладчик, использовать всякие анти-отладочные трюки и каждый виток антиотладочных трюков пораждает новый виток анти-антиотладочных и т.д. Неужели нет возможности вообще вылезти из этой песочницы и поместить "отладчик" ниже программного окружения? Какой-то свой набор отладочных регистров, доступ к которым программными методами невозможен... Тупо подключаемся к ногам на проце и все провода идут в какой-нить ящик ака ноутбук, на нем мы видим все регистры в любой момент, ставим аппаратные брейкпоинты, читаем/пишем память, и все это в обход программного окружения целевой машины. Понимаете? Это означает конец любым программным средствам защиты. Может кто-либо опровергнуть данное утверждение? Вот насчет порта IEEE 1149.1 - это может быть как раз то что нужно...
Broken Sword Неужели нет возможности вообще вылезти из этой песочницы... Помнится были такие штуки как In-Circuit Emulator'ы , для 86, 186 и 286 - видел своими глазами, на 86/186 - даже сам отлаживал, говорят есть даже для 386, но не уверен, для более новых нет - слишком сложно, да и начиная с 386 как известно Intel решила убрать возможности аппаратной отладки в пользу программной (тогда всякие DRx и появились). Но отлаживать на ICE'ах можно было все что угодно, особенно если корректно сэмулируешь окружение/обвязку с которыми программа работает. Всякие ICE/JTAG и пр. - не панацея, и их можно "обойти". Живой пример: на TMS320C55 пытался отлаживать один RT-процесс, так пришлось ставить анализатор шины в виде отдельной плиски которая писала состояния шины в буфер, потому что никакой JTAG не спасал - в чистом прогоне одно, под отладкой - другое (и это при том что программа моя, и не содержит противоотладочных средств)... Отладка изначально задумывалась как "дружественный" программе процесс! Если программа отладке будет сопротивляться - то никуда из этой "песочницы" не деться! Именно это насколько я понял и имела ввиду Intel когда отказалась от поддержки полной аппаратной отладки. Тем более, есть противоотладочные приемы специально для аппаратных эмуляторов, они основаны на том, что окружение процессора (шины, устройства, всякая прочая аппаратура) не эмулируются/контролируются целиком! А если пытаться сэмулировать/контролировать вообще все - то да, конечно, все получится, но это _нереально_ сложно, да и нафиг никому не нужно, потому что никто не разберется в таком потоке информации со всех у-в... Убрать влияние ПО (ОС) полностью нельзя, т.к. там есть много завязок на аппаратуру: тикают таймеры, бегают транзакции шин, работает dma, возникают асинхронно аппаратные прерывания и т.д. Ну и как это _все_ контролировать? А ведь любое из этих событий можно использовать для антиотладочных целей... Это означает конец любым программным средствам защиты. Может кто-либо опровергнуть данное утверждение? Я могу Ничего это не означает, т.к. закон есть закон: "на каждый замок найдется свой ключ", и он еще ни разу не нарушался. А методы противодействия аппаратным отладчикам есть и они даже давно используются в некоторых спецушных микроконтроллерах ... Разве что в PC их пока нет в явном виде, но если понадобится - то нет проблем перенести.
платформа ZX Spectrum. Аппаратный дебагер/etc Multiface, а позже встроенные в Scorpion монитор и отладчик. Привело к зашифровыванию/расшифровке блоков кода на ходу и хорошей проверке железа, да так что теперь проги на эмулях часто не идут.
А ежели тактовый генератор на ключ заменить? Ведь все таймеры и иже с ними на генератор завязаны. Подал импульс с ключа - машина один такт отработала. Долго, но можно пошагово смотреть, что на процессоре выполняется. ЗЫ: Туплю...
Хорошо, а если зайти с другого боку? Виртуальные машины. Кто может высказать трезвую мысль - можно ли присобачить теоретически отладчик к виртуальной машине, который будет работать не на ней?
ViRUS Бедный процессор. Он наверняка перестанет работать раньше, чем частота ядра снизится на 80% от номинальной. Про однотактовый режим и вовсе нечего говорить.
вот красоту раньше делали: http://www.binarydinosaurs.co.uk/scripts/picshow.php?image=multiface12 .jpg&folder=/Museum/Sinclair/multiface1&back=/Museum/Sinclair/multiface1/index.php