Эпиморфный ассемблер |
|
Вся суть эпиморфного ассемблера заключается в
использовании псевдо-макроса altm,
понятие это хоть и новое но ничего сложного в этом нет. Это аккуратное
расширение старого синтаксиса Intel. Синтаксис Intel это когда мнемоника операнд1,операнд2... Синтаксис который я разработал, это когда altm(параметры) мнемоника операнд1,операнд2... Более подробнее смотрите в справке dsmhelp.chm из архива dsmhelp1.3.zip . Там подробно с примерами описана вся схема с параметрами. Этот синтаксис делает возможным создание полностью автоматического дизассемблера. Говоря автоматический дизассемблер я имею ввиду, автоматическое получение рабочих (ассемблируемых) исходников. С использованием старого синтаксиса любая ошибка анализатора может испортить генерируемый исходник. Вообщем не хорошо когда из-за одной не правильно дизассемблированой функции, а то и инструкции, исходник на 500 тысяч строк приходит в негодность и эту ошибку приходится долгими часами искать в этих 500 тысячах строк от которых порой в глазах рябит (хотя не редко бывают и гораздо большие листинги). Использование эпиморфного ассемблера может на всегда снять эту проблему, и любой исследователь сможет просто сосредоточится на изучении и модифицировании той функции которая его более всего интересует. Для тех кто обо всех этих трудностях знает не по наслышке предлагаю провести следующий опыт. 1. Открыть демонстрационную программу bin\dsmdemo.exe. 2. Выбрать пункт меню View->Testing. 3. В комбобокс справа от кнопки Disassemble16 вставте команду создания листинга dasmfile("asmlist64.txt","asmdasm.exe",100400000h,0). 4. Нажмите на кнопку Disassemble16 и закройте MessageBox с надписью Listing ready... 5. Дальше удалите файл bin\asmdasm.exe, за одно можно посмотреть на листинг открыв текстовый файл asmlist64.txt. 6. В комбобокс справа от кнопки Assemble вставте комманду ассемблирования asmfile("asmdasm.exe","asmlist64.txt",100400000h,0). 7. Нажмите кнопку Assemble. 8. Закройте MessageBox с надписью Assembled и попытайтесь запустить получившийся примитив asmdasm.exe. Он должен будет находится в той-же папке что и dsmdemo.exe. Если asmdasm.exe запустился значит всё прошло успешно. Таким-же образом вы можете проверять дизассемблер на своих файлах, которые конечно не жалко и затереть будет. Файлы больше 15 Мб лучше не брать, из-за большой задержки при диз/ассемблировании. Результат работы можно проверить с помощью утилиты сравнения файлов compare.exe. Для выбора файла нужно нажимать на кнопки с троеточиями. И кнопка с надписью Compare используется для запуска сравнения. Если при ассемблировании получился не идентичный файл, то при сравнении с оригиналом эта утилита возвращает результат для обоих файлов в формате: db через запятую 15 последних совпавших байт. ;Difference db через запятую 15 первых не совпавших байт. Такие результаты можете присылать мне на e-mail или сообщать о них в гостевой книге, и я обязательно исправлю ошибки связанные с этим опкодом. |