metasploit-framework/lib/metasm/TODO

115 lines
3.5 KiB
Plaintext

List of TODO items, by section, in random order
Ia32
emu fpu
add all sse2 instrs
realmode
X86_64
decompiler
CPU
Sparc
Cell
Parser
Allow single-file multiplexer (C code + Asm + asm16bit + ...)
Fix the asm prepro comment issue: '; a /* b\n c ; */' should see 'c'
Assembler
Handle cpu pseudo-instrs (mips 'li' -> lui high + ori low)
SplitReloc? (for pseudo-instrs)
Ia32 GAS syntax
Make the autoimport depend on the target platform and not on the exeformat
Encode FPU constants
Disasm
DecodedData
Exe decoding generate decodeddata ?
Function-local namespace (esp+12 -> esp+var_42)
Fix thunk detection (thunk: mov ecx, 42 jmp [iat_thiscall] is not a thunk)
Test with ET_REL style exe
Store stuff out of mem (to handle big binaries)
Better :default usage
good on call eax, but not on <600k instrs> ret
use binary personality ? (uses call vs uses pushret..)
Improve backtrace -> patch di.instr.args exprs
path-specific backtracking ( foo: call a ; a: jmp retloc ; bar: call b ; b: jmp retloc ; retloc: ret ; call foo ; ret : last ret trackback should only reach a:)
Decode pseudo/macro-instrs (mips 'li')
Deoptimizer (instr reordering for readability)
Optimizer (deobfuscating)
Per-instr context (allows to mix cell/ppc, x86 32/16bits, arm/armthumb..)
Compiler
Optimizer
Register allocator
Instr reordering
Asm intrinsics
Asm inline
inline functions
Separate partial compilation + linking (src1.c -> obj1.o, src2.c -> obj2.o, obj1.o+obj2.o -> bin)
Make generic compiler from cpu.instr_binding ?
create a cpu.what_instr_has_binding(:a => (:a + :b)) => 'add a, b' ?
Shellcode compiler (exit() => mov eax, 1 int 80h inline)
Decompiler
Fix decompiling on loaded savefile
Rewrite cpu-specific to really dumb
Just translate di.binding to C
maybe w/ trivial var dependency check for unused regs, but beware :incomplete instrs deps
Check interdependency ('xadd')
Move frame pointer checks / stack var detection to C code
Update asm listing from info in C (stack vars, stack var names..)
Handle renaming/retyping register vars / aliases
Handle switch() / computed goto
Fix inline asm reg dependencies
Handle direct syscalls (mov eax, 1 int 80h => exit())
Autodecode structs
FPU
Handle/hide compiler-generated stuff (getip, stack cookie setup/check..)
Handle call 1f ; 1: pop eax
More user control (force/forbid register arg, return type, etc)
Debugger
OSX
Detour-style functionnality to patch binary code (also static to patch exe files?)
Move constants in a data/ folder (ptrace reg numbers, syscalls, etc)
Generic remote process manip
create blank state
linux virtualallocex
pax-compatible code patch through mmap
Remote debugging (small standalone C client)
Support dbghelp.dll (ms symbol server info)
Support debugee function call (gdb 'call')
Manipulate memory through C struct casts
ExeFormat
Handle minor editing without decode/reencode (eg patch ELF entrypoint)
ELF
test encoding openbsd binaries
handle symbol versions
LoadedELF.dump
Check relocation encoding (eg samples/dynamic_ruby with cpu.generate_PIC=false)
MachO
PE
resource editor ?
rc compiler ?
add simple accessor for resource stuff (manifest, icon, ...)
GUI
debugger
specialize widgets
show breakpoints
show jump direction from current flag values
have a console frontend
better graph positionning fallback
zoom font when zooming graph
copy/paste, selection
map (part of) the binary & debug it (map a PE on a linux host & run it)
Ruby
compile ruby AST to native optimized code