mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-03 04:05:06 +00:00
* Added file.desc
* Cx/CX is not working again, needs more love * Implemented 'pdf' .. needs review
This commit is contained in:
parent
a6840204b5
commit
cc35fbf14f
18
TODO
18
TODO
@ -11,13 +11,18 @@
|
||||
|
||||
Questions:
|
||||
----------
|
||||
* There's dup of info between RMeta and RAnal .. functions.. oh fuck!
|
||||
* imports from PE doesnt works with /a because there's an indirect call
|
||||
* rabin2 doesnt works for osx-x86 mach0 bins..so io.va=1 fails
|
||||
* Store version information in libraries ? debian claims for it
|
||||
* Load symbol information from libraries (only the ones imported by rabin2?)
|
||||
* Implement 'av' command we need it (really?) how about to eval with ?
|
||||
* filter search results..? cc 8080 @@ hit* .. check for values that has changed.
|
||||
|
||||
Bugs:
|
||||
-----
|
||||
* Vu doesnt seems to work always fine :/
|
||||
* Cx/CX are not displayed in disasm as they should.. (C! must die)
|
||||
* if we use objcopy --stripsymbols on a library..the stripped symbols are not
|
||||
listed by nm or rabin..but objcopy is able to see them O_O
|
||||
* anal bug: (fixed??)
|
||||
@ -28,6 +33,7 @@ Bugs:
|
||||
|
||||
TODO:
|
||||
-----
|
||||
* Add 'prj.name', 'prj.desc'
|
||||
* port r_sign to RList
|
||||
* pancake: implement callback for conditional breakpoints
|
||||
* nibble: trace counts after step..thats not correct!
|
||||
@ -38,6 +44,7 @@ TODO:
|
||||
* pancake: FileDescriptors: dd -- copy from !fd in r1
|
||||
* pancake: we need an api to define function signatures
|
||||
- arg/var set name/get value/ ..
|
||||
- CF* must be used to define function shit
|
||||
- integrated with function signatures
|
||||
- offset -> formatstring (offset is the key to function signature)
|
||||
* pancake: implement RAnalCall (analyze function arguments, return values, propagate types..)
|
||||
@ -107,6 +114,7 @@ Build system
|
||||
|
||||
Refactoring
|
||||
===========
|
||||
* Add RLog API.. pipeable to disk and stderr..also hookable ..cool for ui
|
||||
* 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)
|
||||
@ -123,16 +131,6 @@ Refactoring
|
||||
* Finish and import the spp's getopt owns implementation in r_util (like in p9)
|
||||
* Rename __UNIX__ as __POSIX__
|
||||
|
||||
Design
|
||||
======
|
||||
* Implement 'av' command we need it (really?) how about to eval with ?
|
||||
* filter search results..
|
||||
cc 8080 @@ hit* .. check for values that has changed.
|
||||
- maybe we should 'cache' some memory regions
|
||||
* Add 'prj.name', 'prj.desc'
|
||||
* Add description to project e file.desc ?
|
||||
* Add RLog API.. pipeable to disk and stderr..also hookable ..cool for ui
|
||||
|
||||
Future
|
||||
======
|
||||
* radare2 -e dbg.engine=vm -d ls
|
||||
|
@ -94,6 +94,7 @@ static void r_print_disasm(RPrint *p, RCore *core, ut64 addr, ut8 *buf, int len,
|
||||
}
|
||||
// TODO : line analysis must respect data types! shouldnt be interpreted as code
|
||||
line = r_anal_reflines_str (core->anal, core->reflines, addr, linesopts);
|
||||
// TODO: implement ranged meta find (if not at the begging of function..
|
||||
mi = r_meta_find (core->meta, (ut64)core->offset+idx, R_META_ANY, R_META_WHERE_HERE);
|
||||
ret = r_asm_disassemble (core->assembler, &asmop, buf+idx, len-idx);
|
||||
if (ret<1) {
|
||||
@ -105,8 +106,7 @@ static void r_print_disasm(RPrint *p, RCore *core, ut64 addr, ut8 *buf, int len,
|
||||
r_anal_aop (core->anal, &analop, addr, buf+idx, (int)(len-idx));
|
||||
|
||||
// TODO: Show xrefs in both sides..
|
||||
if (mi) {
|
||||
if (mi->from == addr) {
|
||||
if (mi && mi->from == addr) {
|
||||
RListIter *iter;
|
||||
RMetaItem *x;
|
||||
r_list_foreach (mi->xrefs, iter, x) {
|
||||
@ -122,10 +122,10 @@ static void r_print_disasm(RPrint *p, RCore *core, ut64 addr, ut8 *buf, int len,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (adistrick)
|
||||
middle = r_anal_reflines_middle (core->anal,
|
||||
core->reflines, addr, analop.length);
|
||||
/* XXX: This is really cpu consuming.. need to be fixed */
|
||||
{
|
||||
int found = 0;
|
||||
RListIter *iter;
|
||||
@ -1271,7 +1271,18 @@ static int cmd_print(void *data, const char *input) {
|
||||
switch (input[0]) {
|
||||
case 'D':
|
||||
case 'd':
|
||||
r_print_disasm (core->print, core, core->offset, core->block, len, l);
|
||||
if (input[1]=='f') {
|
||||
RMetaItem *item = r_meta_find (core->meta, core->offset, R_META_FUNCTION, R_META_WHERE_HERE);
|
||||
if (item) {
|
||||
int blocklen = item->size;
|
||||
ut8 *block = malloc (item->size+1);
|
||||
if (block) {
|
||||
r_core_read_at (core, core->offset, block, blocklen);
|
||||
r_print_disasm (core->print, core, core->offset, block, blocklen, 9999);
|
||||
free (block);
|
||||
}
|
||||
} else eprintf ("Cannot find function at 0x%08"PFMT64x"\n", core->offset);
|
||||
} else r_print_disasm (core->print, core, core->offset, core->block, len, l);
|
||||
break;
|
||||
case 's':
|
||||
r_print_string (core->print, core->offset, core->block, len, 0, 1, 0); //, 78, 1);
|
||||
@ -2376,19 +2387,20 @@ static int cmd_meta(void *data, const char *input) {
|
||||
case 'x': /* code xref */
|
||||
case 'X': /* data xref */
|
||||
case 'F': /* add function */
|
||||
if (input[1]=='-') {
|
||||
switch (input[1]) {
|
||||
case '-':
|
||||
if (input[2]==' ')
|
||||
addr = r_num_math (core->num, input+3);
|
||||
r_meta_del (core->meta, input[0], addr, addr+1, "");
|
||||
} else
|
||||
if (input[1]=='\0'||input[1]=='*') {
|
||||
break;
|
||||
case '\0':
|
||||
case '*':
|
||||
r_meta_list (core->meta, input[0]);
|
||||
} else {
|
||||
char fun_name[128];
|
||||
break;
|
||||
default: {
|
||||
char *t, *p, fun_name[128];
|
||||
int type = input[0];
|
||||
char *t, *p = strchr (input+2, ' ');
|
||||
if (p) {
|
||||
t = strdup (p+1);
|
||||
t = strdup (input+2);
|
||||
p = strchr (t, ' ');
|
||||
if (p) {
|
||||
*p = '\0';
|
||||
@ -2409,17 +2421,17 @@ static int cmd_meta(void *data, const char *input) {
|
||||
else sprintf (fun_name, "ptr_%08"PFMT64x"", addr);
|
||||
}
|
||||
}
|
||||
addr = r_num_math (core->num, t);
|
||||
if (addr==0LL) // TODO: handle this? eprintf ("FAIL. meta\n");
|
||||
addr = core->offset;
|
||||
// only get abs address in Cx and CX
|
||||
if (type == 'x' || type == 'X')
|
||||
addr_end = r_num_math (core->num, input+2);
|
||||
else addr_end = addr + atoi (input+1);
|
||||
if (type == 'x' || type == 'X') {
|
||||
if (p) {
|
||||
addr = r_num_math (core->num, input+2);
|
||||
addr_end = r_num_math (core->num, p+1);
|
||||
} else addr_end = r_num_math (core->num, input+2);
|
||||
} else addr_end = addr + atoi (input+1);
|
||||
free (t);
|
||||
}
|
||||
r_meta_add (core->meta, type, addr, addr_end, fun_name);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '-':
|
||||
if (input[1]!='*') {
|
||||
|
@ -216,6 +216,7 @@ R_API int r_core_config_init(RCore *core) {
|
||||
r_config_set_cb (cfg, "io.va", "true", &config_iova_callback);
|
||||
r_config_set_cb (cfg, "io.cache", "false", &config_iocache_callback);
|
||||
r_config_set (cfg, "file.path", "");
|
||||
r_config_set (cfg, "file.desc", "");
|
||||
r_config_set (cfg, "file.project", "");
|
||||
r_config_set (cfg, "file.md5", "");
|
||||
r_config_set (cfg, "file.sha1", "");
|
||||
|
@ -224,9 +224,7 @@ R_API int r_meta_add(RMeta *m, int type, ut64 from, ut64 to, const char *str) {
|
||||
R_API RMetaItem *r_meta_find(RMeta *m, ut64 off, int type, int where) {
|
||||
RMetaItem *d, *it = NULL;
|
||||
RListIter *iter;
|
||||
if (off==0LL)
|
||||
return NULL;
|
||||
|
||||
if (off)
|
||||
r_list_foreach (m->data, iter, d) {
|
||||
if (d->type == type || type == R_META_ANY) {
|
||||
switch (where) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user