Здравствуйте, pva, Вы писали:
pva>В IDA были заявления по поводу поддержки ядреной отладки, но в рабочем виде я никогда таковой не видел.
в IDA отладчик работает по GDB протоколу. Поэтому любой GDB stub — и можно отлаживаться.
(При желании можно свой стаб для винды написать, знаю когда такой делали чтобы ранние этапы бута винды отлаживать.)
Я из IDA отлаживал Cortex-M, через OpenOCD. Прямо по голому железу.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Для таких случаев единственно правильный вариант — аппаратный отладчик. Все остальное — баловство и лотерея по определению.
Аппаратный, сам-по-себе, тоже не панацея. Вспомни, как детектили BluePill.
Кстати, аппаратная виртуализация и есть аппаратный отладчик.
Здравствуйте, IID, Вы писали:
IID>в IDA отладчик работает по GDB протоколу. Поэтому любой GDB stub — и можно отлаживаться. IID>(При желании можно свой стаб для винды написать, знаю когда такой делали чтобы ранние этапы бута винды отлаживать.)
Я про
и вероятность того что оно умеет вместо kddbg аттачится. Хотя, выше уже указали на отличное комбо с qemu. Про него я совсем забыл.
Здравствуйте, IID, Вы писали:
IID>Аппаратный, сам-по-себе, тоже не панацея.
Сам по себе он только дает интерфейс для отладки, как и виндовые ядерные отладочные модули. А там уже все определяется софтом, который им управляет.
IID>Вспомни, как детектили BluePill.
Я не вдавался, в чем там были сложности?
IID>аппаратная виртуализация и есть аппаратный отладчик.
Ее, во-первых, нужно как-то настроить (например, запустить отдельный загрузчик), а как в таком случае отлаживать штатную работу того же BIOS? Во-вторых, ее реализация должна позволять полностью воспроизвести исходную конфигурацию (то есть — возможность неограниченной вложенности), а такого, насколько я знаю, ни один процессор не поддерживает.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, undo75, Вы писали:
U>>на больших эвм с перволентой и перфокартами как бы вы отлаживались? ЕМ>Возможно, Вы удивитесь, но средства отладки (как аппаратные, так и программные) были и там.
Как я видел на фоточках тех больших машин, там можно было буквально с большого пульта-консоли сделать дохрена низкоуровневых операций.
В т.ч. считать/записать байты в память. Посмотреть содержимое регистров. Остановить и выполнять программу по шагам.
Вот это — подлинный аппаратный отладчик.
А ещё раньше, в самых первых ЭВМ, даже ассемблера никакого не было. Программы нужно было составлять прямо в машинных кодах с помощью ручки и бумажки. Потом как-то загонять её в ЭВМ, и только затем запускать.
Но программы тех лет были куда как проще нынешних.
Здравствуйте, jamesq, Вы писали:
J>можно было буквально с большого пульта-консоли сделать дохрена низкоуровневых операций.
Да, именно так и работали в однозадачном режиме. Там, где поддерживалась многозадачность, были и средства программной отладки, в том числе символьной.
J>в самых первых ЭВМ, даже ассемблера никакого не было. Программы нужно было составлять прямо в машинных кодах с помощью ручки и бумажки.
Самое смешное, что так нередко делалось на PDP-11 (СМ-4, Электроника-100, Электроника-60 и т.п.). Там была принята восьмеричная система счисления для отображения кодов и команд, а система команд была "ортогональной", где в качестве источника и приемника данных фигурировали пары из метода адресации (три бита) и используемого регистра (еще три бита) — по две восьмеричные цифры. Остальные разряды отводились под код операции, так что и читать, и составлять такие команды было очень легко.
Эта система команд была чертовски компактной и одновременно мощной и удобной, до сих пор по ней ностальгия. Когда нужно было набросать программку из пары десятков команд, и было лень возиться с ассемблером, мы так и забивали машинные коды по абсолютным адресам. Все описание базовой архитектуры и системы команд помещалось на складную картонную карту формата A5, у меня где-то валяется такая.
Еще были забавные компьютеры-калькуляторы Электроника Д3-28, содранные с какого-то Wang'а и творчески доработанные в СССР. Там система счисления уже использовалась псевдо-шестнадцатеричная (пары вида 1215 вместо CF), а система команд организована так, что кнопки ввода цифр и математических операций генерировали соответствующие машинные команды. Их мы тоже программировали прямо в кодах.
J>Но программы тех лет были куда как проще нынешних.
И тогда были очень сложные программы. Порой даже сложнее многих нынешних, поскольку памяти было мало, скорости были низкими, толковых оптимизаторов не было, приходилось оптимизировать вручную и проявлять чудеса изобретательности.
Но даже без извращений можно было сделать довольно много. Я, например, на той же Д3-28 за пару месяцев наколотил в машинных кодах визуальный текстовый редактор с форматированием, печатью, сохранением на ленту и чтением с нее. Когда под рукой нет ничего, кроме голой железки с кнопками, такое не кажется чрезмерно сложным.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>И тогда были очень сложные программы. Порой даже сложнее многих нынешних, поскольку памяти было мало, скорости были низкими, толковых оптимизаторов не было, приходилось оптимизировать вручную и проявлять чудеса изобретательности.
Да уж. Сейчас в порядке развлечения ковыряюсь во всяких древностях. Пытаюсь что-нибудь попрограммировать.
Что у процессора только один регистр аккумулятора для вычислительных операций — к этому я уже привык. Что оперативки только 2 килобайта — это тоже бывает. Что нету операций умножения и деления — так даже интереснее.
Но вот что операция побитового сдвига выполняется только на 1 разряд — это уж слишком.
Здравствуйте, jamesq, Вы писали:
J>операция побитового сдвига выполняется только на 1 разряд — это уж слишком.
"Это вы слишком много кушать". Чтобы команда могла двигать на произвольное количество разрядов, нужно либо микрокод крутить в цикле (и тогда это ничем не лучше обычного цикла), либо иметь в АЛУ до хренища аппаратных мультиплексоров, с помощью которых можно отобразить любую часть слова на любую другую, а это дорого.
J>Я хочу на таком железе sha256 посчитать
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, jamesq, Вы писали:
J>>операция побитового сдвига выполняется только на 1 разряд — это уж слишком.
ЕМ>"Это вы слишком много кушать".
... либо иметь в АЛУ до хренища аппаратных мультиплексоров, с помощью которых можно отобразить любую часть слова на любую другую, а это дорого.
Нынешние владельцы EPYC Genoa с 64 ядрами и терабайтом ОЗУ откровенно зажратые типы по сравнению с подобным. У которых одних транзисторов на чипе в 15 миллионов раз больше.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Но даже без извращений можно было сделать довольно много. Я, например, на той же Д3-28 за пару месяцев наколотил в машинных кодах визуальный текстовый редактор с форматированием, печатью, сохранением на ленту и чтением с нее. Когда под рукой нет ничего, кроме голой железки с кнопками, такое не кажется чрезмерно сложным.
Вот видишь, какой ты способный. Мог бы наколотить и плюсовый компилятор со своими макросами где-нибудь за полгода
Здравствуйте, Евгений Музыченко, Вы писали:
IID>>Вспомни, как детектили BluePill.
ЕМ>Я не вдавался, в чем там были сложности?
Вложенная виртуализация. До Bluepill наивно считалось, что если ты не смог перейти в режим гипервизора — значит он уже запущен. И детект тривиальный.
Bluepill был софтовой реализацией вложенной виртуализации.
И когда у тебя, потенциально, завиртуализировано ВСЁ. Как НАДЕЖНО и в общем случае понять, на реальном железе ты исполняешься, или под виртуалкой.
Напомню, это было время, когда только-только вышли первые платы с AMD виртуализацией, а Intel ещё только обещал выпустить свою.
IID>>аппаратная виртуализация и есть аппаратный отладчик.
ЕМ>ее реализация должна позволять полностью воспроизвести исходную конфигурацию (то есть — возможность неограниченной вложенности), а такого, насколько я знаю, ни один процессор не поддерживает.
И опять напомню про BluePill — там сделали вложенную виртуализацию "руками". Задолго, до появления железной поддержки вложенности.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Самое смешное, что так нередко делалось на PDP-11 (СМ-4, Электроника-100, Электроника-60 и т.п.). Там была принята восьмеричная система счисления для отображения кодов и команд, а система команд была "ортогональной", где в качестве источника и приемника данных фигурировали пары из метода адресации (три бита) и используемого регистра (еще три бита) — по две восьмеричные цифры. Остальные разряды отводились под код операции, так что и читать, и составлять такие команды было очень легко. Эта система команд была чертовски компактной и одновременно мощной и удобной, до сих пор по ней ностальгия.
У S/360 тоже предельно простая как для человека система команд, легко читается и пишется и в дампе, и на пульте. И потомок в виде SystemZ сохранил большую часть этих свойств (хоть ему и не нужно).
ЕМ>Но даже без извращений можно было сделать довольно много. Я, например, на той же Д3-28 за пару месяцев наколотил в машинных кодах визуальный текстовый редактор с форматированием, печатью, сохранением на ленту и чтением с нее. Когда под рукой нет ничего, кроме голой железки с кнопками, такое не кажется чрезмерно сложным.
Хотелось бы услышать подробности о структурах данных и трюках
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>"Это вы слишком много кушать". Чтобы команда могла двигать на произвольное количество разрядов, нужно либо микрокод крутить в цикле (и тогда это ничем не лучше обычного цикла),
Лучше — тем, что на уровне микрокода можно выбрать, как именно удобнее исполнять операцию.
Грубо говоря, в модели 1000 только сдвиг по биту в цикле, в 2000 и 3000 добавлен уровень мультиплексирования, который двигает по 4 бита за такт, а в 5000 и далее — полная бочка.
EM> либо иметь в АЛУ до хренища аппаратных мультиплексоров, с помощью которых можно отобразить любую часть слова на любую другую, а это дорого.
Сейчас уже копейки. Прикольно наблюдать, конечно, мучения народа на 8051, но уже нефункционально.