radare2/TODO

182 lines
6.7 KiB
Plaintext
Raw Normal View History

____ ___ ____ ___ ____ ___ ______ ____
| _ \/ \' \/ \ _ \/ _ \ \__ | / \
| < V . T . V < _/ .-' _/ | () |
|_|\__|_|__|___/|_|_|_|\__\___/ |_____(_)____/
2010-06-17 22:08:10 +00:00
<{include libr/TODO}>
Questions
=========
2010-09-08 23:39:15 +00:00
* rarc2 allows to compile invalid code like calling puts() out of context
* add asm.profile into r2
* Merge r_vm into r_anal ?
* Merge r_vm into r_parse ?
* Add rabin2 .! calls into r_core api? r_core_rabin_import(core, "rIs") ?
0.6 RELEASE
===========
2010-08-26 10:18:30 +00:00
* 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
* Colorize destination address when cursor in branch
* Reimplement or fix the delta diffing in C
- first we need to do it for ired..
* Add dex format support to rabin (android)
* Trace contents of buffers: filter search results..? cc 8080 @@ hit* .. check for values that has changed.
* Cx/CX are not displayed in disasm as they should.. (C! must die)
* Create radare2-testsuite project
* Colorize registers that has changed
Build system:
-------------
* Write documentation about how to build r2, r2-swig, valaswig, make symstall and
some basics about the organization of the code (boring++)
* Store version information in libraries ? debian claims for it
* install.sh (to track installed files ..)
* acr -ldl check must be fixed for kfreebsd
TODO nibble
-----------
* use r_anal_value everywhere in r_anal
* make x86_x86im the default backend for x86 analysis
* implement analysis for more instructions in x86_x86im
* big-ssl.c big-gmp.c ...
* native fat bins support (push uncommited changes)
* 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)
TODO edu
--------
2010-08-26 10:18:30 +00:00
* print data timestamps with 'p'
* 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
------------
2010-08-26 10:18:30 +00:00
* Display eflags in ascii mode
- r_reg_eflags(dbg->reg, "cpastidor")
- static buffer in dbg->reg..fixed size (32)
- printf("eflags: %s\n", r_reg_get_flags (dbg->reg, "cpastidor");
void foo(RRegister *r, RRegisterItem *ri, const char *str) {
}
* 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?
* Record trace of register status for each function when running
{
* 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);
}
2010-08-26 10:18:30 +00:00
- add support for sign/unsigned registers..or at least a way to cast them
- add push/pop of register states (maybe we only need 2 levels of states)
- display regs in colors
- can be used for diffing registers
- is also useful to store values before emulating code
- we can probably implement this in a clone() method? (too heavy? more orgtogonal)
TODO gerardo
------------
2010-07-16 12:48:21 +00:00
* http://etutorials.org/Programming/secure+programming/Chapter+7.+Public+Key+Cryptography/7.5+Generating+a+Prime+Number+Testing+for+Primality/
* implement GMP in util/big.c
unassigned TODO pointz
----------------------
2010-08-26 10:18:30 +00:00
* 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
* Rename r2rc to rarc2 - Moved into binr/rarc2 - Integrated with symstall - rarc2-tool now support -xc and -cx combo - Add rarc2.1 manpage * Add some bugs to review in TODO --HG-- rename : r2rc/Makefile => binr/rarc2/Makefile rename : r2rc/README => binr/rarc2/README rename : r2rc/TODO => binr/rarc2/TODO rename : r2rc/emit_arm.c => binr/rarc2/emit_arm.c rename : r2rc/emit_x64.c => binr/rarc2/emit_x64.c rename : r2rc/emit_x86.c => binr/rarc2/emit_x86.c rename : r2rc/i/libc.r => binr/rarc2/i/libc.r rename : r2rc/i/socket.r => binr/rarc2/i/socket.r rename : r2rc/out.c => binr/rarc2/out.c rename : r2rc/r2rc-tool => binr/rarc2/rarc2-tool rename : r2rc/r2rc.c => binr/rarc2/rarc2.c rename : r2rc/rcc.h => binr/rarc2/rarc2.h rename : r2rc/t/Makefile => binr/rarc2/t/Makefile rename : r2rc/t/argv.r => binr/rarc2/t/argv.r rename : r2rc/t/bytedump.r => binr/rarc2/t/bytedump.r rename : r2rc/t/data.r => binr/rarc2/t/data.r rename : r2rc/t/dump.r => binr/rarc2/t/dump.r rename : r2rc/t/hello.r => binr/rarc2/t/hello.r rename : r2rc/t/if.r => binr/rarc2/t/if.r rename : r2rc/t/inline.r => binr/rarc2/t/inline.r rename : r2rc/t/input.r => binr/rarc2/t/input.r rename : r2rc/t/loop.r => binr/rarc2/t/loop.r rename : r2rc/t/ptr.r => binr/rarc2/t/ptr.r rename : r2rc/t/rawsys.r => binr/rarc2/t/rawsys.r rename : r2rc/t/rawsys64.r => binr/rarc2/t/rawsys64.r rename : r2rc/t/regs.r => binr/rarc2/t/regs.r rename : r2rc/t/ret.r => binr/rarc2/t/ret.r rename : r2rc/t/room.r => binr/rarc2/t/room.r rename : r2rc/t/segfault.r => binr/rarc2/t/segfault.r rename : r2rc/t/shell.r => binr/rarc2/t/shell.r rename : r2rc/t/sub.r => binr/rarc2/t/sub.r rename : r2rc/t/syscall.r => binr/rarc2/t/syscall.r rename : r2rc/test.r => binr/rarc2/test.r
2010-06-28 18:30:20 +00:00
* distribute 'spp' with 'rarc2' ?
* Initial analysis looking for xrefs to strings and so? ax? ./a@@entry0 - Launched at startup
Bindings
========
2010-08-26 10:18:30 +00:00
* 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
===========
* 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 ());
* r_config set_int and so..simplify
* what do we have to do with r_th, r_parse and r_vm ?
* Find a better name for r_buf_fread (really?)
* Review r_io 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
===
* Is RCore->block and blocksize a RBuf ? refactor!11
2010-08-26 10:18:30 +00:00
* Implement rap:// upload/download protocol commands (maybe just system() with rsc2+wget?
Future
======
* 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
* Rename r2rc to rarc2 - Moved into binr/rarc2 - Integrated with symstall - rarc2-tool now support -xc and -cx combo - Add rarc2.1 manpage * Add some bugs to review in TODO --HG-- rename : r2rc/Makefile => binr/rarc2/Makefile rename : r2rc/README => binr/rarc2/README rename : r2rc/TODO => binr/rarc2/TODO rename : r2rc/emit_arm.c => binr/rarc2/emit_arm.c rename : r2rc/emit_x64.c => binr/rarc2/emit_x64.c rename : r2rc/emit_x86.c => binr/rarc2/emit_x86.c rename : r2rc/i/libc.r => binr/rarc2/i/libc.r rename : r2rc/i/socket.r => binr/rarc2/i/socket.r rename : r2rc/out.c => binr/rarc2/out.c rename : r2rc/r2rc-tool => binr/rarc2/rarc2-tool rename : r2rc/r2rc.c => binr/rarc2/rarc2.c rename : r2rc/rcc.h => binr/rarc2/rarc2.h rename : r2rc/t/Makefile => binr/rarc2/t/Makefile rename : r2rc/t/argv.r => binr/rarc2/t/argv.r rename : r2rc/t/bytedump.r => binr/rarc2/t/bytedump.r rename : r2rc/t/data.r => binr/rarc2/t/data.r rename : r2rc/t/dump.r => binr/rarc2/t/dump.r rename : r2rc/t/hello.r => binr/rarc2/t/hello.r rename : r2rc/t/if.r => binr/rarc2/t/if.r rename : r2rc/t/inline.r => binr/rarc2/t/inline.r rename : r2rc/t/input.r => binr/rarc2/t/input.r rename : r2rc/t/loop.r => binr/rarc2/t/loop.r rename : r2rc/t/ptr.r => binr/rarc2/t/ptr.r rename : r2rc/t/rawsys.r => binr/rarc2/t/rawsys.r rename : r2rc/t/rawsys64.r => binr/rarc2/t/rawsys64.r rename : r2rc/t/regs.r => binr/rarc2/t/regs.r rename : r2rc/t/ret.r => binr/rarc2/t/ret.r rename : r2rc/t/room.r => binr/rarc2/t/room.r rename : r2rc/t/segfault.r => binr/rarc2/t/segfault.r rename : r2rc/t/shell.r => binr/rarc2/t/shell.r rename : r2rc/t/sub.r => binr/rarc2/t/sub.r rename : r2rc/t/syscall.r => binr/rarc2/t/syscall.r rename : r2rc/test.r => binr/rarc2/test.r
2010-06-28 18:30:20 +00:00
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))
* Rename r2rc to rarc2 - Moved into binr/rarc2 - Integrated with symstall - rarc2-tool now support -xc and -cx combo - Add rarc2.1 manpage * Add some bugs to review in TODO --HG-- rename : r2rc/Makefile => binr/rarc2/Makefile rename : r2rc/README => binr/rarc2/README rename : r2rc/TODO => binr/rarc2/TODO rename : r2rc/emit_arm.c => binr/rarc2/emit_arm.c rename : r2rc/emit_x64.c => binr/rarc2/emit_x64.c rename : r2rc/emit_x86.c => binr/rarc2/emit_x86.c rename : r2rc/i/libc.r => binr/rarc2/i/libc.r rename : r2rc/i/socket.r => binr/rarc2/i/socket.r rename : r2rc/out.c => binr/rarc2/out.c rename : r2rc/r2rc-tool => binr/rarc2/rarc2-tool rename : r2rc/r2rc.c => binr/rarc2/rarc2.c rename : r2rc/rcc.h => binr/rarc2/rarc2.h rename : r2rc/t/Makefile => binr/rarc2/t/Makefile rename : r2rc/t/argv.r => binr/rarc2/t/argv.r rename : r2rc/t/bytedump.r => binr/rarc2/t/bytedump.r rename : r2rc/t/data.r => binr/rarc2/t/data.r rename : r2rc/t/dump.r => binr/rarc2/t/dump.r rename : r2rc/t/hello.r => binr/rarc2/t/hello.r rename : r2rc/t/if.r => binr/rarc2/t/if.r rename : r2rc/t/inline.r => binr/rarc2/t/inline.r rename : r2rc/t/input.r => binr/rarc2/t/input.r rename : r2rc/t/loop.r => binr/rarc2/t/loop.r rename : r2rc/t/ptr.r => binr/rarc2/t/ptr.r rename : r2rc/t/rawsys.r => binr/rarc2/t/rawsys.r rename : r2rc/t/rawsys64.r => binr/rarc2/t/rawsys64.r rename : r2rc/t/regs.r => binr/rarc2/t/regs.r rename : r2rc/t/ret.r => binr/rarc2/t/ret.r rename : r2rc/t/room.r => binr/rarc2/t/room.r rename : r2rc/t/segfault.r => binr/rarc2/t/segfault.r rename : r2rc/t/shell.r => binr/rarc2/t/shell.r rename : r2rc/t/sub.r => binr/rarc2/t/sub.r rename : r2rc/t/syscall.r => binr/rarc2/t/syscall.r rename : r2rc/test.r => binr/rarc2/test.r
2010-06-28 18:30:20 +00:00
.------------------------.
| ___ ___ ____ |
| | - ) _ _ | _ |/ _/ | please!
| | - \| | |\_ |\_ \ |___. report! :)
| |___/'___'|___'|___/ ___/
| |
`------------------------'