____ ___ ____ ___ ____ ___ ______ ____ | _ \/ \' \/ \ _ \/ _ \ \__ | / \ | < V . T . V < _/ .-' _/ | () | |_|\__|_|__|___/|_|_|_|\__\___/ |_____(_)____/ <{include libr/TODO}> TODO 0.6 ======== pancake * fix colorize of selected bytes * fix eflags string and str_bits * fix arm assembler issue reported via twitter (umf :/) nibble * r_bin - Better way to fix got_offset issue? * in Visual Debugger mode cursor mode also scrolls O_o - cursor mode in visual breaks flags too (r2 -d ls ; Vcjjj) - visual cursor mode and then :f jeje @ addr <- fails! * Switch to 'arm' code analysis module :? * mach0 armthumb bin detect Questions ========= * deltified offset in PC? +10, +30 ... asm.reladdr * Add "pm ?" for bit print like in pb? * Only use uppercase KMG for Kilo,Mega,Giga in r_num? - 'g' is for double * distribute 'spp' with 'rarc2' ? imho no TODO nibble ----------- * r_anal - use r_anal_value everywhere - x86im - make x86_x86im the default backend for x86 analysis * diff code analysis - diff two programs 1st level: - check all functions EQUAL, DIFFERENT, REMOVED, ADDED - check all symbols - check all imports - check all strings 2nd level: - basic block level diffing (output in graph mode) * GMP - big-ssl.c big-gmp.c ... - implement GMP in util/big.c - http://etutorials.org/Programming/secure+programming/Chapter+7.+Public+Key+Cryptography/7.5+Generating+a+Prime+Number+Testing+for+Primality/ TODO edu -------- * remove all uses of alloca() * Implement more get_main() * typedef all function pointers, like in r_bp * Implement /A : search AES * Implement case-insensitive search (e search.casematters ?) any better name? Use /i? * Implement /. to search using a file .. isnt zignatures about this? * Implement /p to search for patterns * Implement search and replace /s TODO pancake ------------ * rarc2 allows to compile invalid code like calling puts() out of context * Implement DRX support * Implement RAnalCall (analyze function arguments, return values, propagate types..) - define number of arguments for given function - warn if signature and analysis differs in number of args or so.. - when calling a function - identify arguments passed and compare with arguments required - if they do not match: we need to warn/ask user/store multiple options - function signature comparsion if they dont match r_anal_fcn_cmp (anal, f1, f2); Bindings ======== * generate accessors from valaswig * Script plugins - We should enable r_lib to implement plugins in any scripting language, so we can for example prepare a .c stub interface for python/perl/ruby/.. - this requires a swig bridge Refactoring =========== * Import r_vm register values from flags or from r_debug->r_reg - r_vm must use mmu cache when emulating code - use the one from r_io? and deprecate vm->mmu_cache? * Review the r_flags api * Add pipe_to_buffer..not only file descriptors * r_config set_int and so..simplify - find/use more common cases for char* or &int maps - automatic callbacks for most common usecases * What do we have to do with r_th, r_vm ? * Merge r_vm into r_anal ? * Merge r_socket inside r_util ? * Add SSL support to r_socket ? * Discuss missing r_core_sysenv_update in core/file.c:33 * Add RLog API.. pipeable to disk and stderr..also hookable ..cool for ui (partially done) * Move disasm loop into r_print (r_print should depend on r_asm) - thats hard :) * Move 'r_syscall_t' stuff into r_debug (sync r_core) * Implement r_bind api to link multiple pointers core->asm = r_bind_set (core->asm->bind, r_asm_new ()); * Find a better name for r_buf_fread (really?) * Review r_io and r_reg API * semi-ok state (R_TRUFAE), implement r_errno and r_errstr in r_util? - useful in r_sys_mkdir ? * Finish and import the spp's getopt owns implementation in r_util (like in p9) 0.7 === * r2 -d > dh native > dp=824 > ... -- not really :) for 0.6 * Create radare2-testsuite project - tests for ired, rax2, radare2, rabin2 ... * Record trace of register status for each function when running - r_reg_arena_copy(); * Add lua and dalvik disassembler (volunteers?) * Reimplement or fix the delta diffing in C - first we need to do it for ired.. * Trace contents of buffers: filter search results..? cc 8080 @@ hit* .. check for values that has changed. * Add dex format support to rabin (android) * Is RCore->block and blocksize a RBuf ? refactor!11 * add support for sign/unsigned registers..or at least a way to cast them * Implement rap:// upload/download protocol commands (maybe just system() with rsc2+wget? * Add support for STATIC_PLUGINS in r_lang - r_lang_define is implemented in lang.c, but requires the collaboration of the plugins to properly setup the environment for the script execution. - Add support for STATIC_PLUGINS in r_lang - dlerror(/usr/lib/radare2/lang_perl.so): libperl.so: cannot open shared object file: No such file or directory This issue is fixed by setting LD_LIBRARY_PATH...looks like dlopen ignores rpath Future ====== * Implement minimalist 'ar' and add support for .a archive libs? (not necessary in this life) * Realign flags when using project in debug mode * FileDescriptors: dd -- copy from !fd in r1 * Initial analysis looking for xrefs to strings and so? ax? ./a@@entry0 - Launched at startup * Store version information in libraries ? debian claims for it * install.sh (to track installed files ..) * acr -ldl check must be fixed for kfreebsd * Add support for float/double in r_num :? * radare2 -e dbg.engine=vm -d ls - load the program using r_bin in virtual space - initialize vm and set regs - debug backend should use the vm Flags ===== - metaflags? support to define relations between flags (flag hirearchies) r_flagtree - r_flags should have a tree construction to access to them faster - btree? following pointers like bigger,smaller { struct r_flag_t *bigger, *smaller; } - hooks r_flag_add to recalculate in r_flag_optimize(), bigger/smaller pointers - hooks r_flag_del to recalculate too. - the r_flag_get by string should have another construction with btree for the string of the name Transaction notes ================= Loading big binaries results on broken interaction. - Optimize bottlenecks - Index flags by name and offset - Dont walk all the entries all the time - Use RDB or RHashMap - Cache - We can just cache the last N used pointers to resolve them faster - Should work fine for disassembling and others - Transactions and threads - BIGLOCK is enought i think - A background thread can load rabin info - r_th is required - We need a way to get 'status' info from thread (msg passing?) - r_th_msg - We can lock the loading thread when a shell command is going to be executed | |--- (while (prompt,lock,run,unlock)) \ `-- (while (lock,load,unlock)) .------------------------. | ___ ___ ____ | | | - ) _ _ | _ |/ _/ | please! | | - \| | |\_ |\_ \ |___. report! :) | |___/'___'|___'|___/ ___/ | | `------------------------'