Fix r2 -B .. sets bin.laddr and honors va=2

This commit is contained in:
pancake 2014-08-25 03:45:11 +02:00
parent 2eefd8908e
commit 3cfeec1d4e
4 changed files with 13 additions and 5 deletions

View File

@ -196,6 +196,7 @@ int main(int argc, char **argv, char **envp) {
RList *cmds = r_list_new ();
RList *evals = r_list_new ();
int cmdfilei = 0;
int va = 1; // set va = 0 to load physical offsets from rbin
r_sys_set_environ (envp);
@ -256,7 +257,10 @@ int main(int argc, char **argv, char **envp) {
do_analysis = R_TRUE;
break;
case 'b': asmbits = optarg; break;
case 'B': baddr = r_num_math (r.num, optarg); break;
case 'B':
baddr = r_num_math (r.num, optarg);
va = 2;
break;
case 'c': r_list_append (cmds, optarg); break;
case 'C':
do_connect = R_TRUE;
@ -350,7 +354,10 @@ int main(int argc, char **argv, char **envp) {
return 0;
}
r_config_set_i (r.config, "bin.baddr", baddr);
if (va == 2) {
r_config_set_i (r.config, "bin.laddr", baddr);
}
// TODO: set io.va = 2 if -B
if (debug) {
r_config_set (r.config, "search.in", "raw"); // implicit?

View File

@ -5,7 +5,6 @@
#define STR(x) (x)?(x):""
// XXX - this may lead to conflicts with set by name
static int r_core_bin_set_cur (RCore *core, RBinFile *binfile);
//static int r_core_bin_set_env (RCore *r, RBinFile *binfile);
static ut64 rva (RBin *bin, int va, ut64 paddr, ut64 vaddr, ut64 baddr, ut64 laddr) {
switch (va) {

View File

@ -349,7 +349,7 @@ R_API int r_io_map_count (RIO *io);
/* io/section.c */
R_API void r_io_section_init(RIO *io);
R_API void r_io_section_add(RIO *io, ut64 offset, ut64 vaddr, ut64 size, ut64 vsize, int rwx, const char *name, ut32 bin_id, int fd);
R_API RIOSection *r_io_section_add(RIO *io, ut64 offset, ut64 vaddr, ut64 size, ut64 vsize, int rwx, const char *name, ut32 bin_id, int fd);
R_API RIOSection *r_io_section_get_name(RIO *io, const char *name);
R_API RIOSection *r_io_section_get_i(RIO *io, int idx);
R_API RIOSection *r_io_section_getv(RIO *io, ut64 vaddr);

View File

@ -27,7 +27,7 @@ R_API RIOSection *r_io_section_get_name(RIO *io, const char *name) {
return NULL;
}
R_API void r_io_section_add(RIO *io, ut64 offset, ut64 vaddr, ut64 size, ut64 vsize, int rwx, const char *name, ut32 bin_id, int fd) {
R_API RIOSection *r_io_section_add(RIO *io, ut64 offset, ut64 vaddr, ut64 size, ut64 vsize, int rwx, const char *name, ut32 bin_id, int fd) {
int update = 0;
RIOSection *s;
if (size==0 || size>0xf0000000) {
@ -54,6 +54,7 @@ R_API void r_io_section_add(RIO *io, ut64 offset, ut64 vaddr, ut64 size, ut64 vs
else *s->name = '\0';
r_list_append (io->sections, s);
}
return s;
}
R_API RIOSection *r_io_section_get_i(RIO *io, int idx) {
@ -73,6 +74,7 @@ R_API int r_io_section_rm(RIO *io, int idx) {
R_API void r_io_section_clear(RIO *io) {
r_list_free (io->sections);
io->sections = r_list_new ();
io->sections->free = free;
}
// TODO: implement as callback