* Fix list and select archs in rabin2 (flags -A and -a)

* Fix memory leak in rabin2
* Fix segfault in r_bin_use_arch()
This commit is contained in:
Nibble 2011-09-04 02:19:43 +02:00
parent a95de05ec0
commit 334a6bcfb8
2 changed files with 14 additions and 7 deletions

View File

@ -816,14 +816,22 @@ int main(int argc, char **argv) {
r_bin_free (bin);
return 0;
}
if (!r_bin_load (bin, file, R_FALSE) && !r_bin_load (bin, file, R_TRUE)) {
eprintf ("r_bin: Cannot open '%s'\n", file);
return 1;
}
if (action & ACTION_LISTARCHS && (arch || bits || arch_name)) {
if (action & ACTION_LISTARCHS) {
r_bin_list_archs (bin);
return 0;
}
if (arch || bits || arch_name) {
if (!r_bin_select (bin, arch, bits, arch_name)) {
r_bin_list_archs (bin);
free (arch);
free (arch_name);
r_bin_free (bin);
return 1;
}

View File

@ -359,16 +359,15 @@ R_API RBin* r_bin_new() {
return bin;
}
static RBinInfo userinfo;
// TODO: handle ARCH and BITS
R_API int r_bin_use_arch(RBin *bin, const char *arch, int bits, const char *name) {
struct list_head *pos;
bin->curarch.info = &userinfo;
memset (&userinfo, 0, sizeof (userinfo));
strncpy (userinfo.arch, arch, sizeof (userinfo.arch));
userinfo.bits = bits;
if (!bin->curarch.info)
bin->curarch.info = R_NEW (RBinInfo);
memset (bin->curarch.info, 0, sizeof (RBinInfo));
strncpy (bin->curarch.info->arch, arch, R_BIN_SIZEOF_STRINGS);
bin->curarch.info->bits = bits;
list_for_each_prev(pos, &bin->bins) {
RBinPlugin *h = list_entry (pos, RBinPlugin, list);