Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Чемпионы рейтинга экспертов в этой рассылке Номер выпуска: | 1345 | Дата выхода: | 27.05.2010, 22:30 | Администратор рассылки: | Лысков Игорь Витальевич, Модератор | Подписчиков / экспертов: | 263 / 63 | Вопросов / ответов: | 1 / 1 | IRC-канал по теме: | #assembler | Вопрос № 178568: Уважаемые эксперты! Требуется написать программу(с комментариями) Разработать резидентную программу для ОС MSDOS.Программа может быть выполнена в виде exe или com файла. При попытке отформатировать диск программа выдает сообщение о невозможности тако... Вопрос № 178568: Уважаемые эксперты! Требуется написать программу(с комментариями) Разработать резидентную программу для ОС MSDOS.Программа может быть выполнена в виде exe или com файла. При попытке отформатировать диск программа выдает сообщение о невозможности такой операции и всегда возвращает вызвавшей программе код ошибки. Ассемблер TASM. Отправлен: 22.05.2010, 18:22 Вопрос задал: Филимонов Алексей Викторович, 1-й класс Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич, Модератор : Здравствуйте, Филимонов Алексей Викторович. Примерная программа ниже. Программа перехватывает выполнение функции 5 (форматирование) и в случае попытки форматировать взводит флаг C и возвращает код ошибки "защиты записи". К сожалению, проверить не могу, флоппи нет в принципе, а на жестком не хочется пробывать...
Код: .model tiny .code .startup jmp init ;на инициализацию New13h: ;новый вектор 13h cmp ax, 1234h ;проверка на повторную инсталяцию jne CmpFormat mov ax, 4321h ;программа уже инсталирована iret CmpFormat: cmp ah, 05h ;формат? jne ToOld13h ;нет - на старый вектор ;просто stc ничего не даст, ; после iret флаг потеряется! push bp ;Но, флаг FC мы можем в звести в стеке! mov bp, sp ;будем адресовать с помощью bp or byte ptr [bp+6], 1 ;в стеке: [bp] = старый bp ; [bp+2] = IP ; [bp+4] = CS ; [bp+6] = FLAGS ;0001h - маска флага C pop bp ;восстановим bp mov ah, 3 ;код ошибки "Защита записи" iret ;выход из прерывания, ; по выходу взведется флаг FC
ToOld13h: jmp cs:dword ptr old13h ;все остальное на отработку ; по старому вектору
old13h dw ?, ? ;адрес старого вектора 13h
init: ;инициализация mov ax, 1234h ;проверим на повторную загрузку int 13h cmp ax, 4321h je finish ;просто завершаемся push bx es mov ax, 3513h ;узнаем адрес старого вектора int 21h ; в es:bx mov old13h, bx ;сохраняем mov old13h+2, es pop es bx
lea dx, New13h ;устанавливаем новый вектор 13h mov ax, 2513h int 21h
lea dx, loaded ;сообщение mov ah, 9 int 21h
lea dx, init ;оставляем в памяти резидентом int 27h ; до адреса init
finish: lea dx, already ;сообщение mov ah, 9 int 21h mov ax, 4c00h ;обычный выход при повторной загрузке int 21h
.data loaded db 'Program loaded$' already db 'Program already loaded$'
end
----- Удачи! Ответ отправил: Лысков Игорь Витальевич, Модератор Ответ отправлен: 23.05.2010, 22:20 Номер ответа: 261597 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 261597 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий