Что такое резидентная программа?
Резидентными (TSR) называют такие программы, которые остаются в оперативной памяти после того, как они завершат управление.
В Borland Си и С++, предусмотрена специальная функция geninterrupt, которая выдает такое программное прерывание.
Резидентная программа состоит из двух частей - рабочей части
и резидентной части. Рабочая часть выполняет загрузку резидентной
части в память и устанавливает вектор прерываний, который определяет характер вызова резидентной в памяти программы. Если резидентная программа должна вызываться с помощью программного прерывания, то рабочая часть программы помещает адрес резидентной части кода в соответствующий вектор прерывания. Если резидентная
программа должна вызываться с помощью оперативной клавиши, то резидентная часть должна модифицировать обработчик прерывания DOS
для обработки нажатия соответствующих клавиш (клавиши) на клавиатуре.
Когда рабочая часть завершает выполнение, она вызывает функцию DOS, которая позволяет части файла .EXE оставаться резидентной в оперативной памяти после завершения выполнения программы.
Рабочая часть резидентной программы знает размер резидентной части, а также ее адрес в памяти, и передает эту информацию DOS.
Операционная системе DOS при этом резервирует специальный блок
памяти, но может свободно записывать информацию в незащищенную
часть памяти. Таким образом, резидентная часть остается в памяти,
а рабочая часть может быть "затерта".
Тонкость отладки резидентных программ состоит в том, что вы
должны иметь возможность отлаживать и резидентную, и рабочую
часть программы. Когда выполняется файл .EXE, то выполняется
только код рабочей части TSR. Поэтому, когда вы как обычно запускаете отладчик, задав имя файла, вы видите выполнение только рабочей части кода программы: то, как он устанавливает резидентную
часть и обработчики прерываний. Чтобы отлаживать резидентную
часть, вы должны задать точку останова и сделать резидентным сам
отладчик.