Beispiel #1
0
static int
my_read_memory (bfd_vma memaddr,
		bfd_byte *myaddr,
		unsigned int length,
		struct disassemble_info *info)
{
  int ret = buffer_read_memory(memaddr,myaddr,length,info);

  if (EIO == ret) {
    Segment *seg = get_segment_of((asm_program_t*)info->application_data, memaddr);
    if (NULL == seg)
      return EIO;

    info->buffer = seg->data;
    info->buffer_vma = seg->start_addr;
    info->buffer_length = seg->datasize;
    info->section = seg->section;

    ret = buffer_read_memory(memaddr,myaddr,length,info);
  }
  return ret;
}
Beispiel #2
0
static int my_read_memory (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *info)
{
    int ret = buffer_read_memory(memaddr,myaddr,length,info);

    if (EIO == ret) {
        bincode_t *bin = info->application_data;
        section_t *sec;
        for(sec=bin->sec;sec!=NULL;sec=sec->next)
            if((memaddr>=sec->vma) && (memaddr<(sec->vma+sec->datasize)))
                break;
        if (NULL == sec)
            return EIO;

        info->buffer = sec->data;
        info->buffer_vma = sec->vma;
        info->buffer_length = sec->datasize;
        info->section = sec->section;

        ret = buffer_read_memory(memaddr,myaddr,length,info);
    }
    return ret;
}