Описую мої рухи тіла як і обіцяв запускаю mmtool (

Описую мої рухи тіла як і обіцяв:

Запускаю mmtool (v2.22.1). Виколупую звідти всі модулі в окремі файли. (Меню Extract - In uncompressed form, Module ID Offset і Segment не чіпаю). Нагадую, що програма глючная злегка і при переміщенням по меню (у мене більше ніж 3 зміни) завершується аварійно, тому я робив так: Запустив mmtool. Вибрав 'Power MMtool'.

Вибрав Load ROM. Потім мишкою вибрав Extract. Далі мишкою вибираю потрібний можудь і в меню Extract підміню Extract. Описую я це тому що сам поки не зрозумів. що програма підвисає через переміщень по меню. починав сильно сумніватися в можливості програми.

Якщо когось цікавить чому я вибрав саме цей (другий шматок коду з знайденим CD 13 і яке значення отримує dl перед int 13h питайте - опишу детальніше). Мені здалося що це тривіальні міркування тому я їх і опустив.

Отже місце де зчитується завантажувальний сектор в пам'ять знайдено.
Починаємо правити цей модуль (runtime).

Переглядаючи з hiew я намагався виявити необхідні для мене ділянки коду з FF. Таких виявилося одна штука (зміщення 00000644). Довжиною 32 байта. Малувато подумав я і вирішив акуратніше подивитися на шматки поспіль 00, не забуваючи в принципі що це запросто могли б бути дані які використовуються для ініціалізації (обнуляенія) какой-нить структури даних використовуваної для роботи BIOS. Тут я трохи схалявіть - понядеявшісь на російську авось і не став сильно копатися нулі це для ініціалізації або просто пусте місце. Побіжно прошвирнувшісь в IDAPro я став майже впевнений що ті ділянки нулів які я буду використовувати - порожні місця.

Отже маємо такі шматки вільні для запису нашого коду.


00000616: довжина 90 байт
00005590: довжина 110 байт
000057С9: довжина 108 байт
0000598E: довжина 44 байта
000091A7: довжина 44 байта

По ходу справи ще зустрічалися ділянки 000046B0 (менше 32 байт я не включив - бо того що було мені в принципі вистачило)

Плюс ще є досить великі ділянки з 0 (але я не став возитися з ними через близького сусідства з даними строкового типу - можливо їх і можна було б використовувати але для цього потрібно бути впевненим і витратити час на солідний шматок трасування BIOS - навіть з IDAPro це заняття не сильно інтелектуальне - і рутинна трасування BIOS починає часом сильно стомлювати)
І В кінці runtime є ще солідний шматок з 20h (це прогалина) який можна було б використовувати внісши невелика зміна до BIOS.

000055B0: cli (жорстко звичайно вимикати переривання які вже могли б виконуватися навіть в BIOS але я вважаю за краще бути впевненим що-небудь мені не поміняє регістри особливо ss sp)
000055B1: pusha (зберігаємо всі регістри)
000055B2: pushf (зберігаємо регістр прапорів)
Далі у мене дуже марнотратна трата вільного місця (мені потрібні показання годин з BIOS)
Весь код і особливо основну процедуру (робота c HDD) я наводити не буду замінюючи її nop але пару шматочків коду можу привести
000055B3:
mov ax, 09
out 070, al
in al, 071 (це ми беремо дві останні цифри від року)
push al
nop (прибрав я цей шматок коду щоб не актвізіровать творчість вітчизняних умільців в непотрібному напрямку)
nop
pop al
000055D6: call 000057E0 (E80702)
nop (6штук)
000055DF: call 000057E0 (E8FE01)
000055E2: popf
000055E3: popa
000055E4: push 000
000055E6: pop es
000055E8: retn

з процедури 000057E0 (йдуть виклики і повернення в решту 3 вільних ділянки блоку). Описувати я їх тут не стану, але в якому-небудь закритому форумі думаю зміг би

Нагадую - довжина модуля runtime змінилася.
Тепер вставка цього модуля в основний файл ROM BIOS.
Як і раніше обережно використовуємо mmtool. Тут я потратл злегка часу намагаючись вказати segment і offset з того місця яке було розшифровано самим mmtool. Але тут мене осягали обломи бо чомусь після Replace, у мене в mmtool змінювалися точки розпакування модуля в пам'ять. Солідно поднадобламавшісь через глючності mmtool (хоча не сперечаюся роботу вона свою робить) я один раз не вказав ні сегмент ні зміщення, і в загальному все пройшло успішно модуль замінився і вся інфа про точках входу та інше залишилася колишньою.

Далі взяв рідний прошивальщик і прошив новим ROM.
Тестеві вже 9 днів. Політ нормальний.
Глюків поки не помічав.

З повагою, Віктор.

P.S. Незнаю чи потрібні комусь ці файли (runtime наприклад), я давав посилання на самому початку посту де цей ROM можна скачати. Ну я думаю mmtool і hiew найдти якщо пошукати. На випадок якщо вже не Насилу знайти необхідний інструмент (hiew mmtool) відписувався до адмінам форуму. Якщо вони дозволять я сіллю то за допомогою чого експериментував.