22.12.2006, 02:24
общий
это ответ
Здравствуйте, Whiteman!
В принципе возможно, но:
1. В одной программе может быть несколько точек выхода, т.е. передаёте управление первому файлу, а он выполняет int 20h /fn 00h int21h /fn 4ch int 21h /sp=0fffeh ret
Решение:перехватывать соответствующие прерывания.
2. Смещения в .com рассчитываются исходя из того, что адрес загрузки-CS:100h
Решение:после выполнения перевой программы записать поверх неё вторую и передать ей управление.
Предлагаю сразу после первой программы поместить вторую, просле второй-наш код. А первые байты первой программы(естественно, предварительно сохранив их) заменяем на jmp на наш код. Там перехватываем прерывания, восстанавливаем байты и jmp на код первой проги. Когда она завершится управление перейдёт к нашему обработчику(его также помещаем в конце, после двух программ), он копирует код второй программы на место первой(CS:100h), восстанавливает векторы прерываний и передает управление на CS:100h.
Не забывайте про суммарный размер-64kb, а также про стек, что рестет снизу, и может затереть наш код.
Как видете, не всё так просто, как кажется на первый взгляд.
План действий я наметил, дальше, надеюсь, справитесь.
С уважением, IceW0|f.