Отладка программ в защищенном режиме

Тема в разделе "WASM.ASSEMBLER", создана пользователем the_player, 25 июн 2006.

  1. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    Долго мучаюсь с написанием программы, выполняющей переход в защищённый режим =) В связи с чем возник вопрос: можно ли каким-то образом отлаживать такие программы? А то очень сложно даже сказать, до куда дошло управление.. =)



    Заранее спасибо!
     
  2. NeTxXx

    NeTxXx New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    11
    the_player

    впринципе, в bochs есть средства отладки.. только я сам пока в них не разобрался :)

    попробуй поискать мануалов по отладке в bochs
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    the_player

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

    Долго мучился с VMWare пока не понял, что она глючит. Нужно обязательно делать выкл/вкл вместо перезагрузки. Перезагрузка не помогает, если в ходе выполнения программы произошла ошибка.

    Насчет bochs. Мануалы есть на и их сайте. Но мне они не помогли, так и не смог я понять как его можно правильно использовать. Правда показывает, куда дошло управление.



    PS. В ответ на соседний топик нужно запрещать маскируемые и немаскируемые прерывания. И селекторы не правильно найдены.И прыжок у тебя в никуда. Может еще что-то есть.
     
  4. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Имхо, надо не поленится и написать свои обработчки исключений, которые по крайней мере выводят:



    - номер исключения;

    - адрес исключения cs:eip;

    - несколько байтов (достаточных для последующего поиска точки crash) по cs:eip, вызывавшему исключение (тут надо учесть, что в некоторые обработчики исключения типа int 1h при срабатывании отладочного исключения настроенного в DR7 передается адрес следующей инструкции).



    В аттаче некий пример - задавали давно вопрос на codenet про проблему с такой программой - я сумел найти проблему указанным выше способом.



    PS В конечном счете эти самые исключения как раз и предназначены для отладки;



    PPS Наверное, не очень сложно написать свой пошаговый дебуггер в PM, надо только поставить флаг отладки сразу после перехода в PM и он будет делать debug print по каждой инструкции.

    [​IMG] 451102426__Kernel.asm
     
  5. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    Pavia

    Да, спасибо, после того, как я:



    1) запретил маскируемые и немаскируемые прерывания

    2) исправил значения селекторов



    VMWare перестала вешаться. Но, насчёт прыжка "в никуда" я не очень понял.. Объясните, пожалуйста)
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Линейный адрес в реальном режиме состоит из: сегмент*16+ смещения. У тебя прыжок работает в защищенном режиме, и происходит по линейному адресу. А ты подставил в него смещение.
     
  7. valterg

    valterg Active Member

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

    В bochs отладчик убогий, а в версии 2 втюхали ошибку в алгоритм бряков по обращению в память. Я пользовался им для отладки ДОС-программы, которая использует INT1 для расшифровки самой себя. Пиши - расскажу про отладчик.
     
  8. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    Valterg

    Да, было бы здорово услышать, как пользоваться отладчиком в Bochs.. Я несколько раз пытался разобраться в нём, но так ничего и не вышло... (

    Первый вопрос, который возникает - как начать следить за выполнением своей программы сразу после её запуска? Буду очень признателен, если подскажете =)
     
  9. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    the_player bochsdbg.exe -f filename, а дальше бряки.
    Отлаживать конечно не удобно, но возможно
     
  10. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    ProgramMan

    Хм.. Может я что-то не так понял, но по-моему ключ -f используется для указания конфигурации, нет? И сразу второй вопрос ), как узнать адреса, на которые надо устанавливать breakpoint'ы? Для этого нужно узнавать, куда в памяти загружена моя программа?
     
  11. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    the_player, а ты не знаешь?????????
    Ты грузишся с образа дискеты? тогда ставь бряк на 7C00h
     
  12. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    the_player
    зы:
    Можешь в личку кинуть где качашь бошь?
     
  13. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    the_player bochsdbg.exe -f filename
    filename - имя файла с конфигурацией ВМ
     
  14. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    ProgramMan
    А зачем такие сложности? ИМХО, проще переименовать файл в bochsrc.txt и не указывать каждый раз при запуске. Ну разве только при наличии нескольких конфигураций...
     
  15. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Mika0x65, у меня почти под куждую ось своя конфигурация.
    А вообще-то контекстное меню рулит.
     
  16. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    EvilsInterrupt
    Мне самому друзья дали, но вроде здесь должен быть:
    http://bochs.sourceforge.net/cgi-bin/topper.pl?name=See+All+Releases&url=http://sourceforge.net/project/showfiles.phpqmrkgroup_ideq12580
     
  17. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    ProgramMan

    Спасибо за помощь, но, наверное, отлаживать начиная с адреса 0x007C будет слишком долго =).
    В общем, я решил проблему путём копирования своего кода в известное мне место и передачи управления на него.. После этого проблема с выяснением адреса для breakpoint решилась