Долго мучаюсь с написанием программы, выполняющей переход в защищённый режим =) В связи с чем возник вопрос: можно ли каким-то образом отлаживать такие программы? А то очень сложно даже сказать, до куда дошло управление.. =) Заранее спасибо!
the_player впринципе, в bochs есть средства отладки.. только я сам пока в них не разобрался попробуй поискать мануалов по отладке в bochs
the_player Сам долго мучился, с переходом в защищенный режим. Ну добился своего. Если честно кроме, как на мозг надеется не приходится. Долго мучился с VMWare пока не понял, что она глючит. Нужно обязательно делать выкл/вкл вместо перезагрузки. Перезагрузка не помогает, если в ходе выполнения программы произошла ошибка. Насчет bochs. Мануалы есть на и их сайте. Но мне они не помогли, так и не смог я понять как его можно правильно использовать. Правда показывает, куда дошло управление. PS. В ответ на соседний топик нужно запрещать маскируемые и немаскируемые прерывания. И селекторы не правильно найдены.И прыжок у тебя в никуда. Может еще что-то есть.
Имхо, надо не поленится и написать свои обработчки исключений, которые по крайней мере выводят: - номер исключения; - адрес исключения cs:eip; - несколько байтов (достаточных для последующего поиска точки crash) по cs:eip, вызывавшему исключение (тут надо учесть, что в некоторые обработчики исключения типа int 1h при срабатывании отладочного исключения настроенного в DR7 передается адрес следующей инструкции). В аттаче некий пример - задавали давно вопрос на codenet про проблему с такой программой - я сумел найти проблему указанным выше способом. PS В конечном счете эти самые исключения как раз и предназначены для отладки; PPS Наверное, не очень сложно написать свой пошаговый дебуггер в PM, надо только поставить флаг отладки сразу после перехода в PM и он будет делать debug print по каждой инструкции. 451102426__Kernel.asm
Pavia Да, спасибо, после того, как я: 1) запретил маскируемые и немаскируемые прерывания 2) исправил значения селекторов VMWare перестала вешаться. Но, насчёт прыжка "в никуда" я не очень понял.. Объясните, пожалуйста)
Линейный адрес в реальном режиме состоит из: сегмент*16+ смещения. У тебя прыжок работает в защищенном режиме, и происходит по линейному адресу. А ты подставил в него смещение.
the_player В bochs отладчик убогий, а в версии 2 втюхали ошибку в алгоритм бряков по обращению в память. Я пользовался им для отладки ДОС-программы, которая использует INT1 для расшифровки самой себя. Пиши - расскажу про отладчик.
Valterg Да, было бы здорово услышать, как пользоваться отладчиком в Bochs.. Я несколько раз пытался разобраться в нём, но так ничего и не вышло... ( Первый вопрос, который возникает - как начать следить за выполнением своей программы сразу после её запуска? Буду очень признателен, если подскажете =)
ProgramMan Хм.. Может я что-то не так понял, но по-моему ключ -f используется для указания конфигурации, нет? И сразу второй вопрос ), как узнать адреса, на которые надо устанавливать breakpoint'ы? Для этого нужно узнавать, куда в памяти загружена моя программа?
ProgramMan А зачем такие сложности? ИМХО, проще переименовать файл в bochsrc.txt и не указывать каждый раз при запуске. Ну разве только при наличии нескольких конфигураций...
EvilsInterrupt Мне самому друзья дали, но вроде здесь должен быть: http://bochs.sourceforge.net/cgi-bin/topper.pl?name=See+All+Releases&url=http://sourceforge.net/project/showfiles.phpqmrkgroup_ideq12580
ProgramMan Спасибо за помощь, но, наверное, отлаживать начиная с адреса 0x007C будет слишком долго =). В общем, я решил проблему путём копирования своего кода в известное мне место и передачи управления на него.. После этого проблема с выяснением адреса для breakpoint решилась