Пример #1
0
std::unique_ptr<DexCode>& MethodCreator::to_code() {
  std::unique_ptr<DexCode> code(new DexCode());
  code->set_registers_size(top_reg);
  code->set_ins_size(ins_count());
  code->set_outs_size(out_count);
  method->set_code(std::move(code));
  for (auto& mi : *meth_code->m_fmethod) {
    if (mi.type == MFLOW_OPCODE) {
      DexInstruction* insn = mi.insn;
      if (insn->dests_size()) {
        insn->set_dest(get_real_reg_num(insn->dest()));
      }
      for (int i = 0; i < static_cast<int>(insn->srcs_size()); i++) {
        insn->set_src(i, get_real_reg_num(insn->src(i)));
      }
    }
  }
  while (!meth_code->try_sync())
    ;
  return method->get_code();
}
Пример #2
0
DexCode* MethodCreator::to_code() {
  DexCode* code = new DexCode();
  code->set_registers_size(top_reg);
  code->set_ins_size(ins_count());
  code->set_outs_size(out_count);
  code->set_debug_item(nullptr);
  method->set_code(code);
  for (auto mi : *meth_code->m_fmethod) {
    if (mi.type == MFLOW_OPCODE) {
      DexOpcode* opcode = mi.op;
      if (opcode->dests_size()) {
        opcode->set_dest(get_real_reg_num(opcode->dest()));
      }
      for (int i = 0; i < static_cast<int>(opcode->srcs_size()); i++) {
        opcode->set_src(i, get_real_reg_num(opcode->src(i)));
      }
    }
  }
  while (!meth_code->try_sync())
    ;
  return method->get_code();
}