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; }
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; }