·─T─┌O┐─T─┌A┐L···─Z┐┌0┐┌M┐┌B·i┌F─i┌C─┌A┐─T─i┌O┐┬N┬··························
│ │ │ │ ├─┤│ / │ ││││├┴┐┬├─ ┬│ ├─┤ │ ┬│ ││└┤ Issue #1, January-2001
··│·└─┘·│·│·│└─··└──└─┘│·│└─┘││··│└──│·│·│·│└─┘│·│··························
············································································
ДИЗАССЕМБЛЕР ДЛИН [lde*.zip]
············································································
Представляю вашему вниманию две новых версии дизассемблера длин LDE32.
Этот движок позволяет получить длину почти любой 32-битной x86/87
инструкции, с учетом префиксов и всего прочего, но кроме всяких
MMX-оподобных и специфических изъебств.
Основу движка составляет таблица флагов, по дворду на байт, и так два
раза: для обычных опкодов и для 0F- опкодов. Всего 2048 байт.
В версии LDE 1.05 таблица представлена как есть, что удобно для
апгрейта движка дополнительными свойствами. В этом случае в движке всего
одна процедура -- disasm(), с одним параметром -- поинтером на опкод.
В версии LDE 1.06 таблица сжата Хаффманом, и процедур в движке две:
одна -- init(), с одим параметром -- поинтером на 2048 байт под таблицу,
и вторая -- disasm(), с двумя параметрами -- поитерами на опкод и таблицу
соответственно.
Оформлены процедуры в стиле cdecl (надо делать ADD ESP, nn), а в
качестве результата в EAX возвращается длина инструкции в байтах или -1 в
случае неизвестной инструкции.
include lde32bin.inc ; LDE32, 1.06
tbl db 2048 dup (?) ; таблица флагов LDE32
push offset tbl ; адрес таблицы
call disasm_init ; распаковать в память таблицу
add esp, 4
mov ebx, 0BFF71000h ; адрес для дизасма
cycle:
push ebx ; адрес дизассемблируемой инструкции
push offset tbl ; адрес таблицы
call disasm_main ; получить длину в EAX
add esp, 8
cmp eax, -1 ; ошибка?
je error
add ebx, eax ; к следующей инструкции
jmp cycle
Движок может быть (и был) использован в качестве базы для всевозможных
алгоритмов вирусных мутаций и дизассемблирования кода под win32.
············································································