ut64 r_bin_te_get_main_offset(struct r_bin_te_obj_t *bin) { struct r_bin_te_addr_t *entry = r_bin_te_get_entrypoint (bin); ut64 addr = 0LL; ut8 buf[512]; if (r_buf_read_at (bin->b, entry->offset, buf, sizeof (buf)) == -1) { eprintf ("Error: read (entry)\n"); } else { if (buf[367] == 0xe8) { int delta = (buf[368] | buf[369]<<8 | buf[370]<<16 | buf[371]<<24); addr = entry->rva + 367 + 5 + delta; } } free (entry); return addr; }
static RList* entries(RBinFile *arch) { RList* ret; RBinAddr *ptr = NULL; struct r_bin_te_addr_t *entry = NULL; if (!(ret = r_list_new ())) return NULL; ret->free = free; if (!(entry = r_bin_te_get_entrypoint (arch->o->bin_obj))) return ret; if ((ptr = R_NEW (RBinAddr))) { ptr->paddr = entry->paddr; ptr->vaddr = entry->vaddr; r_list_append (ret, ptr); } free (entry); return ret; }
ut64 r_bin_te_get_main_paddr(struct r_bin_te_obj_t *bin) { RBinAddr *entry = r_bin_te_get_entrypoint (bin); ut64 addr = 0LL; ut8 buf[512]; if (!bin) { return 0LL; } if (r_buf_read_at (bin->b, entry->paddr, buf, sizeof (buf)) == -1) { eprintf ("Error: read (entry)\n"); } else { if (buf[367] == 0xe8) { int delta = (buf[368] | buf[369]<<8 | buf[370]<<16 | buf[371]<<24); delta += 367 + 5; addr = entry->vaddr; if (delta >= (UT64_MAX - addr)) { free (entry); return UT64_MAX; } addr += delta; } } free (entry); return addr; }