コード例 #1
0
ファイル: asm_program.cpp プロジェクト: bengheng/Expose
/* do we need this? --aij
raw_insts_t *
raw_insts_of_file(const char *filename)
{
  //segs = NULL;
  raw_insts_t *ret = new raw_insts_t;
  asm_program_t *prog = new asm_program_t;

  bfd *abfd = initialize_bfd(filename);
  initialize_sections(abfd, prog);
  prog->functions = identify_functions(prog->sections, abfd);


  for(map<address_t, asm_function_t *>::const_iterator it = 
	prog->functions.begin(); it != prog->functions.end();
      it++){
    asm_function_t *f = it->second;
    bfd_vma pc = f->start_addr;

    // Disassemble the function
    while(pc <= f->end_addr){
      bfd_byte *ptr = get_ptr_to_instr(prog, pc);

      raw_inst_t *temp = new raw_inst_t;
      temp->length = instr->length;
      temp->bytes = ptr;
      temp->address = instr->address;
      ret->push_back(temp);
      pc += instr->length;
    }
  }
  return ret;
}
*/
asm_program_t *
disassemble_program(const char *filename)
{
  asm_program_t *prog = new asm_program_t;
  //segs = NULL;
  bfd *abfd = initialize_bfd(filename);
  prog->abfd = abfd;
  initialize_sections(abfd, prog);
  prog->functions = identify_functions(prog->sections, abfd);
  unsigned long total_instrs =0;
  set<asm_function_t *> functions;
  for(map<address_t, asm_function_t *>::const_iterator it = 
	prog->functions.begin(); it != prog->functions.end();
      it++){
    // Give each function a unique ID (for BGL)
    // and fill in control flow graph, etc for function
    asm_function_t *f = it->second;
    //f->cg_num = cg_num++;
    disassemble_function(f, prog);
    functions.insert(f);
    if(is_debug_on("stats")){
      for(map<address_t, Instruction *>::const_iterator iit = 
	    f->instmap.begin(); iit != f->instmap.end(); iit++){
	total_instrs++;
      }
    }
  }
  
  print_debug("stats", "Size of program %u (instrs)\n", total_instrs);
  //create_callgraph(prog);
  return prog;
}
コード例 #2
0
int main(int argc, char** argv, char** envp) {
	if(argc!=1) {
		fprintf(stderr, "%s: usage: %s\n", argv[0], argv[0]);
		return EXIT_FAILURE;
	}
	disassemble_function("_exit");
	return EXIT_SUCCESS;
}