Выполняет сборку строки с мнемоникой.
JoinMnemonic PROTO hInstr:HINSTR,Mnemonic:PVOID,MnemLen:PULONG,dwFlags:DWORD
Возможно
использовать следующий набор флагов.
curr_id=0
enf OFFSETS_COL,
HEX_COL, RIP_ADDRS,REL_ADDRS
enf
CR,NOT_TABBED,
LF, ALT_MNEM
enf REL_FFFF_ADDRS,
DB_STRING,ADDR_COMPACT
OFFSETS_COL - мнемоника будет
начинаться с абсолютного аддресса.
HEX_COL
- слева от основной части мнемоники будет её шестнадцатеричный код.
RIP_ADDRS -
аддреса с rip-аддрессацией в формате [$+/-disp32][длина_инструкции].
REL_ADDRS -
относительные аддресса в формате $+/-xxxxxxxxh.
CR
- завершение строки байтом 13.
NOT_TABBED - строка
без TAB-oв.
LF
- завершение строки байтом 10.
ALT_MNEM -
добавление псевдо-макроса altm.
REL_FFFF_ADDRS - используется вместе с флагом
REL_ADDRS.Использование записи с простыми оффсетами для 16-битных
аддрессов в 32 или 64-битном коде или для 32-битных аддрессов в 16-битном.
DB_STRING -
вывод опкода вместо мнемоники, в форме для ассемблирования.
ADDR_COMPACT - уменьшение количества
разрядов в аддрессе, по возможности если флаг OFFSETS_COL
установлен. Для 16-битного кода ширина аддресса без этого флага 8 символов,
т.е. подразумевается 32-битный оффсет инструкции, но с этим флагом ширина
аддресса может быть уменьшена до 4 символов на слачай оффсетов от 0 до 0FFFFh.
Для 64-битного кода ширина аддресса без этого флага всегда 16 символов, но в
случае оффсетов от 0 до 0FFFFFFFFh для колонки аддрессов хватит и 8 символов.
А также полезные сочетания.
CR_LF
equ (CR or LF or
ALT_MNEM)
STD_MNEM equ
(CR_LF or OFFSETS_COL
or HEX_COL or ALT_MNEM
or ADDR_COMPACT)
RIP_REL
equ (RIP_ADDRS or REL_ADDRS
or CR_LF or ALT_MNEM)
STD_CLEAR_MNEM equ (NOT_TABBED
or ALT_MNEM)
RIP_REL_LF equ (RIP_ADDRS
or REL_ADDRS or LF
or ALT_MNEM)
Возвращаемое значение: eax равен нулю если не было ошибок, хотя не равенство нулю не означает невозможности дальнейшей работы. Если строка Mnemonic пустая то дизассемблирование необходимо прекратить. Тип DWORD.