/*-----------------------------------------------------------------------*/
/* R I N G 0, I S S U E # 1 */
/*-----------------------------------------------------------------------*/
Универсальный дизассемблер Alma
by Gr.Protagor // SBVC
Gu // SBVC
Мы создали примитивный, но очень полезный :) dizasm, который позволяет
разбирать команды и получать такую информацию, как: длину команды, её
тип (например, арифметическая/пересылки/портовая и т.п.), что позволяет
уже абсолютно спокойно заменять команды их смысловыми (по типу)
аналогами.
Для примера предлагается программка, которая заменяет в другой
программке асмусовую команду MOV EAX, 1 на аналогичную по смыслу
последовательность команд: XOR EAX, EAX; NOP; INC EAX; NOP. Причём, если
посмотреть в код изменяемой проги, то не все так тупо, как могло бы
быть: вхождения последовательности байтов, совпадающих с кодом MOV'а не
заменяется, если не является MOV'ом. Для простоты примера мы не
вписывали в него разборщик заголовка EXE-шника, а прописали нужние цифры
ручками :).
В файле ALMA.INC вы сможете найти всё полезное по use'анию OBJ-ектника:
заполняемую процедуркой структуру и список команд по типам. Дальнейшие
планы таковы: приписать к каждой команде, в её описательную структуру
флаги используемых входных и выходных элементов, то как: изменяемые
флаги, регистры. Используя их мы сможем не только заменять команды
поодиночке на их эквиваленты, но и менять команды между собой. Тем самым
мы сможем добиться нехилого видимого изменения кода, последовательности
кода без изменения создаваемого программой эффекта.
Не смотрите на пример слишком строго:) - он для понимания использования
OBJ-ектника, а не как что-то реальное.
Поставляемые файлы [vx05.rar]:
ALMA.OBJ - собственно сам дизассемблер :)
ALMA.INC - необходимые данные для дизасма.
ALMATEST.ASM - тест для дизасма
ALMATEST.BAT - как это всё компиляется
HELLO.EXE - используется для теста
HELLO.ASM - его исходник
09.11.2001