субота, 17 червня 2017 р.

wxHexEditor та доктор Уотсон

Розробникам часто потрібен нормальний редактор шістнадцядкового коду. Чи є такий інструмент в Лінуксі? Відповідь на це питання дасть команда:

sudo apt-get install wxhexeditor

Та оскільки він написаний на WxWidgets, то, я певен, він є і для Windows, й для MacOS.
Серед особливостей:
  • підтримка величезних файлів (2 ексабайт)
  • зручні пошук та заміна
  • декодування в різних системах числення
  • дизасемлювання
  • історія з можливістю відкату.

Але до чого тут доктор Уотсон?

Історія така: була в мене старенька програма (не буду рекламувати), написана під DOS, яка працювала з LPT портами. Але лише стандартними на адресах 0x0378 (LPT1), 0x0278 (LPT2), 0x03B8 (LPT3). Та ноутбуків з LPT портом вже не зустрінеш. Замість них використовуються різні перехідники USB-LPT, PCMCIA-LPT. А у них адреси портів вже зовсім не стандартні (В моєму випадку 0xFFD8).

Як же заставити працювати цю стару програму з нестандартними портами? Елементарно, Уотсоне, - за допомогою wxHexEditor.

1. Знаючи, що для керування LPT викристовуються адреси 0x0278-0x027F, 0x0378-0x037F було вирішено відшукати в коді всі звернення до цих адрес. Я обмежився лише основними регістрами. Вийшла табличка типу:

2. Методом дедукції визначаємо ймовірні місця  звернення до портів. Адже є висока ймовірність, що інші місця програми мають коди, подібні до номерів портів. Втім у нормально складеної програми адреси портів мають зберігатися в масивах (припущення). Тож відшукавши їх, можна змінити адреси портів на потрібні. Підкреслені в табличці адреси, скоріш за все і є тими елементами масивів.

3. Робимо заміну для прикладу всі послідовності 78 03 на D8 FF (у нашого пристрою діапазон адрес 0xFFD8-0xFFDF), а також 79 03 на D9 FF і 7A 03 на DA FF.

4. Зберігаємо результат, пробуємо запускати і... вуаля! Воно працює. Сподіваюся, що не зачепив нічого зайвого.

PS. Звичайно справжні експерименти починалися з безумовних замін по всьому тілові програми, але вони призвели до відсутності деяких меню на екрані, а в певних випадках навіть аварійному завершенні. Після цього було застосовано аналіз, приведений вище. Зрештою цікавий вийшов challenge.

Джерела:

Немає коментарів:

Дописати коментар