Задача отладить свою прогу в bochs. Нужно как то остановиться на начале пргоги. В bochs есть возможность установить bp на память. Но заранее не извеснстно куда загрузиться моя прога. В инете находил примеры отладки, но они для отладки boot-секторов, а там адресс известен заранее, 0x7C00. Предлагают, в начало своей проги вписать код, который копирует тело проги в какой-либо известный регион памяти, ставить на его bp и передавать на него управление. А вдруг затру чего нужное, если Дос уже загружен? А можно как нибуть в bochs отловить прерывание, например int 3, забитое в начале проги? Пробовал записать вектор этого прерывания (3 * 4 = 0x000C) каким нибудь значением, и ставить на этот адрес bp, например так: Код (Text): xor AX, AX mov DS, AX mov word [0x000C], 0x1234 mov word [0x000E], 0x5678 но чегото не работает?
А почему бы не посмотреть адрес в IDT (info idt 3 в Bochs) и не поставить на начало обработчика точку останова?
Да, это хорошая идея .. Но я туплю, не знаю как прервать выполнение и попасть в отладчик, что бы посмотреть вектор для int 3? Ctrl+C не помогает
Вариант с перезаписью вектора для int 3 работает, я там перепутал сегмент и смещение местами, думал что устанавливаю адрес 0x1234:0x5678, а на самом деле же 0x5678:0x1234. Но все равно по адресу [0x5678:0x1234] приходиться перезаписывать один байт на код команды iret (0xCF). Пока пользуюсь этим..
http://bochs.sourceforge.net/doc/docbook/user/bochsrc.html#AEN1966 Если в конфиге Bochs выставить magic_break: enabled=1, то отладчик будет вызываться на каждой инструкции xchg bx,bx. Для отладки своей проги неплохо подходит.
Mika0x65 кнопки такой я как-то не нашел, а она была бы полезна.. diamond О да, это подходит .. Спасибо. p.s. Сначала подумал, зачем выбрали такое выражение для magic-breakpoint'а, потом подумал еще и понял, что это очень удобно, их даже в чистовой версии проги убирать не нужно или закомментировать, не то что int 3, например.