fully supported: the decompiler knows what the inputs and outputs (register, flags, memory location) are and how the output is calculated
adc, add, and, bsf, bsr, bt, btc, btr, bts, call, cbw, clc,
cld, cli, cmc, cmovcc, cmp, cmps, cmpxchg, cwd, dec, div,
enter, idiv, imul, inc, iret, jcc, jcxz/jecxz, jmp, lahf,
lea, leave, lods, loop, mov, movs, movsx, movzx, mul, neg,
nop, not, or, pop, popa, popf, push, pusha, pushf, rol,
ror, rcl, rcr, shl, shr, sar, ret, sahf, sbb, scas, setcc,
shld, shrd, stc, std, sti, stos, sub, test, xadd, xchg,
xlat, xor, xadd
- input/output supported: the decompiles knows what the inputs and outputs are and uses a builtin function in the decompiled source code
aaa, aad, aam, aas, bound, bswap, cmpxchg8b, cpuid, daa,
das, in, ins, int, out, outs, rdtsc, rep
- unsupported: nothing is known about these opcodes and they are modeled as inline assembler
arpl, clts, enter, hlt, lar, lgdt, lidt,
lds/les/lfs/lgs/lss, lldt, lmsw, lsl, ltr, sgdt, sidt,
sldt, smsw, str, verr, verw, wait, invd, invlpg, wbinvd,
rdmsr, wrmsr
The complete list of changes:
- feature: support (in various levels) hopefully all x86 opcodes excluding FPU, x64, MMX, SSE
- feature: add –help command line option
- feature: add –hide-addresses command line option
- feature: -c supports now multiple functions which are matched on function name with a regexp
- feature: differ between three different types of undefined values: cpu opcode results in undefined value, not modeled by the decompiler and trashed by a function call
- feature: add new type ‘bit’ to the external type system
- feature: simplify cond?0:1 to BIT_TO_INT(!cond) and cond?1:0 to BIT_TO_INT(cond)
- feature: simplify x-y>42 to x>y+42
- feature: a new file ‘symbol_table.txt’ is written in current directory after each run
- feature: support ‘pc’ in the m68k code
- change: use register names with two letters if required e.g. ‘reg_da’
- change: replace builtin functions prefix from ‘intern_’ to ‘holdec‘
- change: create names according their definition place; this should make generated names more repeatable
- change: rework how concrete numbers are treated internally
- change: treat signed and unsigned comparisons different internally
- change: format numbers depending on the context (bit context -> unsigned hex, signed context -> signed decimal, unsigned and unknown context -> unsigned decimal)
- change: rework the SSA generation to use an algorithm based on Aycock and Horspool
- change: do not convert tail controlled loops with a fixed number of iterations to a for(…) loop
- fix: only issue a warning and do not die if a jump with a constant false condition is removed
- fix: add dummy values for local->register converted variables without an initial assignment
One of the things I have learned is that a signed shift right is not equivalent to a signed divide.
]]>