PDA

Просмотр полной версии : Запуск дисков как в iS-DOS как сделать?



Evgeny Muchkin
03.07.2006, 23:25
Вот такой вопрос. Интересует, собственно, каким должно быть содержание девятого сектора (в какое место сектора записывать собственный загрузчик) и т.д.

И физику процесса запусков таких дисков тоже интересно знать, поделитесь знаниями кто в курсе плиз :)

Vitamin
04.07.2006, 10:30
Все относительно просто. Когда трдос читает каталог (начиная с 9 сектора с описанием диска), данные с диска идут в буфер размером 256 байт (ну привыкла трдос так...). На самом деле данных читается столько, сколько физически лежит в секторе (128, 256, 512 или 1024). А следом за этим буфером лежат адреса процедур обработки каналов ввода-вывода (кажется так...). Так вот, если 9 сектор будет больше 256 байт, его хвост перекроет эти адреса процедур и окажет непосредственное влияние на обработку потоков информации (печать на экран в данном случае).
Вот значит и организуется сектор таким образом, что перехватывает управление на себя и самостоятельно продолжает грузить диск.

icebear
04.07.2006, 12:01
Вот значит и организуется сектор таким образом, что перехватывает управление на себя и самостоятельно продолжает грузить диск.

IS-DOS - большой вирус?

Evgeny Muchkin
04.07.2006, 15:42
Вот значит и организуется сектор таким образом, что перехватывает управление на себя и самостоятельно продолжает грузить диск.

Можно поточнее, желательно с примером - именно точное рассмотрение этого вопроса мне и интересно. :)

spensor
04.07.2006, 15:57
Можно поточнее, желательно с примером - именно точное рассмотрение этого вопроса мне и интересно.
Этот вопрос был рассотрен в одном из E-zine. Но в каком точно не помню, возможно в ZX Format #6-#7. Метод применялся и в IS-DOS, и Черном Вороне, и еще где-то.

psb
04.07.2006, 16:00
IS-DOS - большой вирус?
хы:))) а ведь да, это самая настоящая уязвимость в TR-DOS:))) только никто раньше не знал, что это называется уязвимостью;))) типа, переполнение буфера:))

интересно, что еще подобное есть? помню, когда с лент грузились кодовые блоки на стек.. самозапускались тоже.. а еще что-нить?


Можно поточнее, желательно с примером
ех.. вот, делал я такое, но ооочень давно.. теперь без ковыряния и не вспомнишь.. жаль вообще, что столько всего интересного (и еще кому-то нужного!) просто забывается.. может, у кого-нить инфа в понятном виде лежит..:)

psb
04.07.2006, 16:06
теперь без ковыряния и не вспомнишь..
собс-но, если нигде не найдешь, можно взять эмуль, поставить туда какой-нить такой диск, поставить точки останова на (примерно) #5D00-#5E00 и запустить. при запуске диски вылетит на некоем адресе старта. потом ищешь, где в секторе находится этот адрес (смещение в секторе). ну и заодно узнаешь, по какому адресу этот сектор грузится;)

Evgeny Muchkin
04.07.2006, 16:23
Не нашел в ZX format 6,7 статей про это дело. Видимо придется осваивать эмульский отладчик. (off и спековкую клаву - постоянно Break вместо delete нажимаю ;))

Evgeny Muchkin
05.07.2006, 16:37
Все ZX Форматы пересмотрел, нету нигде про эту тему ни слова :( А что такое E-zine ?

Все-таки хочется теоретически подковаться предварительно :)

spensor
05.07.2006, 17:03
Все ZX Форматы пересмотрел, нету нигде про эту тему ни слова
То что было описано это факт, но вот просто так вспомнить где не удается:( Как вариант это мог быть "Черная Ворона". Я постараюсь поискать в своих заметках, но в успехе не уверен. Однозначно могу сказать что это не Spectrofon - статья публиковалась в годах 1998-1999, если мне склероз не изменяет:)


А что такое E-zine ?
Electronic Magazine - Электронный журнал. Тоесть Spectrofon, ZX-Format и прочие. Есть еще E-paper:)

spensor
06.07.2006, 10:04
Все ZX Форматы пересмотрел, нету нигде про эту тему ни слова
Просмотрел свои заметки, нашел вроде (журнал не просматривал) то что нужно:
Черная Ворона 2 -> Програмистам -> Hacker Club -> Mortal Combat (Длинный 8 сектор). В соседних статьях, тоже касаются вопроса 8 сектора. Дерзайте!

Evgeny Muchkin
06.07.2006, 12:55
spensor, огромное спасибо!! Изучим. :)

Jukov
06.07.2006, 17:38
В далекие 90-е разрабатывали операционную систему для спека. Проект сгнил, а загрузка с девятого сектора осталась. В приложении программа, которая записывается в 9й сектор (в конце листинга есть небольшая процедура). Для работы программы необходимо, чтобы 9-й сектор был отформатирован на длину более 256 байт.

caro
07.07.2006, 11:30
Вот такой вопрос. Интересует, собственно, каким должно быть содержание девятого сектора (в какое место сектора записывать собственный загрузчик) и т.д.

И физику процесса запусков таких дисков тоже интересно знать, поделитесь знаниями кто в курсе плиз :)

Загрузчик с 9 сектором (номер 8) большим 256 байт.

Буфер TRDOS длиной 256 байт, в который происходит загрузка
9-го сектора, имеет адрес 5D25h.
Перед чтением сектора системные переменные бэйсика, размещенные
в этом адресном пространстве, временно смещаются на 256 байт
выше в ОЗУ компьютера, начиная с адреса 5E25h.
В ячейках 5E27h..5E28h при этом оказывается адрес процедуры
выдачи на экран сообщений (канал экрана).
Признаком диска формата TRDOS является байт 10h, записанный
в 9 секторе со смещением +0E7h относительно его начала.
Если байт в этой ячейке не равен 10h, то TRDOS
выдает на экран сообщение "Disk error".
При длине сектора 256 байт сообщение как и положено выдается
на экран, поскольку в адресе 5E27h..5E28h находится истинный
адрес процедуры выдачи сообщения на экран (по умолчанию 09F4h).
Если 9 сектор имеет длину больше 256 байт, то поскольку
процедура чтения все равно прочитывает его весь, все что
больше 256 байт перекрывает область системных переменных, и
если по смещению +0E7h относительно начала сектора не будет
прочитан байт 10h, то при попытке выдачи сообщения об
ошибке будет выполнена команда, расположенная по адресу
взятому из указателя 5E27h..5E28h (+102h..+103h от начала
сектора).
В ISDOS в эти ячейки записывается адрес начала буфера
TRDOS (5D25h), что и приводит к запуску начального загрузчика
этой ОС, записанного в 9 сектор системного диска, длина
которого равна 1024 байта.

Отсюда:
1) длина 9-го сектора должна быть 512 или 1024 байта;
2) по смещению +0e7h от начала сектора не должно быть
байта со значением 10h;
3) по смещению +102h..103h от начала сектора должен
быть записан адрес запуска загрузчика (проще всего
сделать его равным 5D25h).

Вот и все.....

Evgeny Muchkin
19.07.2006, 15:44
caro, спасибо! Именно такого ответа я и ждал :)