
                     Универсальный дизассемблер 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-ектника, а не как что-то реальное.

 Поставляемые файлы:

 ALMA.OBJ     - собственно сам дизассемблер :)
 ALMA.INC     - необходимые данные для дизасма.
 ALMATEST.ASM - тест для дизасма
 ALMATEST.BAT - как это всё компиляется
 HELLO.EXE    - используется для теста
 HELLO.ASM    - его исходник

                                                               09.11.2001
