diff --git a/TODO b/TODO index 0ee905278a..e098d40046 100644 --- a/TODO +++ b/TODO @@ -26,11 +26,14 @@ Questions TODO nibble ----------- +* r_anal + - use r_anal_value everywhere +* x86im + - make x86_x86im the default backend for x86 analysis + - implement analysis for more instructions +* r_bin + - Better way to fix got_offset issue? * Cx/CX are not displayed in disasm as they should.. (C! must die) -* Better way to fix got_offset issue? -* 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 * diff code analysis - diff two programs 1st level: @@ -40,9 +43,10 @@ TODO nibble - check all strings 2nd level: - basic block level diffing (output in graph mode) -* 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/ +* 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 -------- diff --git a/binr/rabin2/rabin2.c b/binr/rabin2/rabin2.c index 49d0e10a0e..20fc878ddf 100644 --- a/binr/rabin2/rabin2.c +++ b/binr/rabin2/rabin2.c @@ -118,12 +118,25 @@ static int rabin_show_main() { return R_TRUE; } -static int rabin_extract() { - if (!r_file_dump (output, bin->curarch->buf->buf, bin->curarch->size)) { - eprintf ("Error extracting %s_%i\n", - bin->curarch->info->arch, bin->curarch->info->bits); - return R_FALSE; - } else eprintf ("%s created\n", output); +static int rabin_extract(int all) { + char out[512]; + int i; + if (all) { + for (i=0; inarch; i++) { + snprintf (out, sizeof (out), "%s.%s_%i", output, + bin->arch[i].info->arch, bin->arch[i].info->bits); + if (!r_file_dump (out, bin->arch[i].buf->buf, bin->arch[i].size)) { + eprintf ("Error extracting %s\n", out); + return R_FALSE; + } else eprintf ("%s created\n", out); + } + } else { + if (!r_file_dump (output, bin->curarch->buf->buf, bin->curarch->size)) { + eprintf ("Error extracting %s_%i\n", + bin->curarch->info->arch, bin->curarch->info->bits); + return R_FALSE; + } else eprintf ("%s created\n", output); + } return R_TRUE; } @@ -424,7 +437,9 @@ static void rabin_list_archs() { int i; for (i=0; inarch; i++) - printf ("%s_%i\n", bin->arch[i].info->arch, bin->arch[i].info->bits); + printf ("%s_%i %s (%s endian)\n", bin->arch[i].info->arch, + bin->arch[i].info->bits, bin->arch[i].info->machine, + bin->arch[i].info->big_endian?"big":"litle"); } static int rabin_show_fields() { @@ -759,7 +774,7 @@ int main(int argc, char **argv) if (action&ACTION_SRCLINE) rabin_show_srcline(at); if (action&ACTION_EXTRACT) - rabin_extract(); + rabin_extract(arch==NULL); if (op != NULL && action&ACTION_OPERATION) rabin_do_operation (op);