Версія 2.11 була гібридом IBM-івської 2.10 (2.1) та Мікрософтівської 2.01, з її підтримкою інтернаціоналізації та всілякими багфіксами. Випущена вона Microsoft і призначалася для OEM, відмінних від IBM. Тому присутня в дуже багатьох варіантах.
Скачав я "Microsoft DOS 2.11 (5.25).7z", дістав SYS.COM, почав колупатися. І дуже здивувався --- код навіть не схожий на попередні варіанти. Нічим. Ні стилем, ні підходом, ні будовою. Перевірка показала, що цей архів, насправді, лише копія іншого, "Microsoft DOS 2.11 [AT&T OEM] (5.25).7z". Точніше, бінарно і архіви і образи в них --- різні. Але файли у них -- однакові. Тобто, якщо я чогось жорстоко не плутаю, "vanilla" MS-DOS 2.11 мені знайти не вдалося.Якщо хтось має -- діліться!
В процесі пошуків, правда, натрапив на архів "Microsoft DOS 2.12 [Compaq OEM] (5.25).7z", який містить SYS.COM, дуже схожий на оригінальний, з однією важливою відмінністю -- в ньому пише "Vers 1.81", тобто, ймовірно, він містить попередню до розглянутої в аналізі SYS.COM з PC-DOS 2.10, версію. Про неї детальніше --- наступним постом, а зараз декілька слів про AT&T-шний SYS.COM.
"Розколупати" повністю я її не зміг, та й лінь стало, якщо чесно. Справа в тому, що це зовсім інша програмка --- DOS постачався OEM у вигляді OAK, комплектів, що містили джерельні тексти IO.SYS та деяких утиліт, включаючи SYS.COM, щоб виробники могли підігнати під свої потреби і свою апаратуру. Очевидно, фірма вирішила, що написати свою буде кращою ідеєю, ніж використати готову. З того що побачив у коді, не впевнений, чи це було правильним рішенням :-)
На початку коду копірайт: "SYS utility Copywrite 1984 Phoenix Software Associates, Ltd", точніше, "Copywrite" :-). Далі йде ім'я автора: "written by Alan Jay Weiner". На весь Інтернет знайшлася лише одна людина із таким іменем, програміст, віком 58 років, який колись (може і зараз, звичайно), багато програмував на системному рівні. Тобто, ймовірно він і є автором. Я написав, запитався, чи не захоче він розповісти щось про історію тієї програмки. Поки не відповів.
Код --- негарний. Складний, плутаний, з явними помилками. Детально розбирати не буду, лише пара прикладів.
1. Друк на екран здійснюється громіздкою процедурою, з якою я повністю так і не справився. Вона вміє друкувати як на екран, так і на принтер, хоча викликається (здається), тільки для екрану. Завантажує символи по одному, кожен "детально розглядає", літери з кодом, більшим за 20h, просто друкує. Із меншим -- якось хитро обробляє, кожен по своєму. Ну, тобто, зрозуміло, що це --- спеціальні символи і все таке, (див. таблицю ASCII-кодів), вони вимагають уваги. Однак, з одного боку --- навіщо їх обробляти, виводячи прості, тривіальні, стрічки з невеликої самописної програми, коли чітко відомо, які ті стрічки будуть? З іншого --- обробка якась дуже хитра... Скажімо, якщо я правильно зрозумів (не впевнений), то для деяких спец-символів наступні два байти стрічки служать адресою, з якої береться символ для друку.
Підозрюю, це просто підключена якась телетайпівська бібліотека... Але нафігасічки?!
2. Підпрограма, яка, здається, читає boot-сектор цільового диску, початок:
push ds ; Save DS - next call spoils it mov dl, ds:5Ch ; Target disk from PSP FCB1 mov ah, 32h int 21h ; DOS - 2+ internal - GET DRIVE PARAMETER BLOCK ; На цей момент DS вказує на сегмент з rive Parameter Block (DPB), ; десь в нутрощах DOS. ; Змінюємо поле в DPB mov byte ptr [bx+17h], 0FFh ; "Disk not accessed" ; і зразу після цього: mov dl, ds:5Ch ; DS --- somewhere in DOS Data... mov ah, 32h int 21h ; DOS - 2+ internal - GET DRIVE PARAMETER BLOCK ; Тобто явно надлишковий, некоректний код. Ймовірно, забута копі-паста. pop ds push cs pop es
Тобто, явна груба помилка, хоча, в даному випадку, здається --- безобідна.
На загал, весь код громіздкий, "важковаговий", ймовірно --- з купою багів (хоча точно не скажу, недорозколупав). Тобто, можливо, по функціональності та надійності вона навіть краща, за оригінальну --- не розібравшись повністю, сказати складно. Але виглядає сумно.
Розбиратися глибше не став, як кому цікаво --- відповідний файл IDA Free 5.0, де є мої попередні "наробітки", можна скачати тут.
Немає коментарів:
Дописати коментар