R_API int r_core_bin_set_env (RCore *r, RBinFile *binfile) { RBinObject *binobj = binfile ? binfile->o: NULL; RBinInfo *info = binobj ? binobj->info: NULL; if (info) { int va = info->has_va; const char * arch = info->arch; ut16 bits = info->bits; ut64 loadaddr = r_config_get_i (r->config, "bin.laddr"); ut64 baseaddr = binobj->baddr; /* Hack to make baddr work on some corner */ r_config_set_i (r->config, "io.va", (binobj->info)? binobj->info->has_va: 0); r_config_set_i (r->config, "bin.laddr", loadaddr); r_config_set_i (r->config, "bin.baddr", baseaddr); r_config_set (r->config, "asm.arch", arch); r_config_set_i (r->config, "asm.bits", bits); r_config_set (r->config, "anal.arch", arch); if (strlen(info->cpu)) r_config_set (r->config, "anal.cpu", info->cpu); else r_config_set (r->config, "anal.cpu", arch); r_asm_use (r->assembler, arch); r_core_bin_info (r, R_CORE_BIN_ACC_ALL, R_CORE_BIN_SET, va, NULL, loadaddr, NULL); r_core_bin_set_cur (r, binfile); return R_TRUE; } return R_FALSE; }
static int config_asmarch_callback(void *user, void *data) { RCore *core = (RCore *) user; RConfigNode *node = (RConfigNode *) data; const char *asmos = r_config_get (core->config, "asm.os"); r_egg_setup (core->egg, node->value, core->anal->bits, 0, R_SYS_OS); if (!r_asm_use (core->assembler, node->value)) eprintf ("asm.arch: cannot find (%s)\n", node->value); if (!r_config_set (core->config, "anal.plugin", node->value)) { char *p, *s = strdup (node->value); p = strchr (s, '.'); if (p) *p = 0; r_config_set (core->config, "anal.plugin", s); free (s); } if (!r_syscall_setup (core->anal->syscall, node->value, asmos, core->anal->bits)) { //eprintf ("asm.arch: Cannot setup syscall '%s/%s' from '%s'\n", // node->value, asmos, R2_LIBDIR"/radare2/"R2_VERSION"/syscall"); } //if (!strcmp (node->value, "bf")) // r_config_set (core->config, "dbg.backend", "bf"); return R_TRUE; }