Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uint8_t rsi_value = process.read<uint8_t>(scope->rsi + scope->base);
- uint64_t handler_addr = process.read<uint64_t>(scope->r12 + rsi_value * 8 + scope->base);
- InstructionList instructions = disasm_handler(handler_addr);
- if (!scope->is_neg_rsi)
- scope->rsi += 1;
- size_t rsi_size = matcher->match(instructions);
- if (scope->ret)
- {
- expect(scope->ret->const_value.type == ConstValueType::Image);
- if (scope->ret->const_value.value64 == ret_addr)
- {
- expect(scope->stack_pos == -1);
- break;
- }
- expect(false);
- break;
- }
- if (scope->jmp)
- {
- expect(!rsi_size);
- expect(scope->r12 == start_r12);
- if (scope->load_cc)
- {
- dot(scope->jmp);
- ir(scope->jmp);
- expect(scope->load_cc->target_node_0->const_value.type == ConstValueType::Const);
- expect(scope->load_cc->target_node_1->const_value.type == ConstValueType::Const);
- scope->next_0 = link_basic_block(scope->r12, scope->load_cc->target_node_0->const_value.value64 + (scope->is_neg_rsi ? -1 : 0), ret_addr);
- scope->next_1 = link_basic_block(scope->r12, scope->load_cc->target_node_1->const_value.value64 + (scope->is_neg_rsi ? -1 : 0), ret_addr);
- }
- else
- {
- expect(scope->jmp->const_value.type == ConstValueType::Image);
- scope->next_0 = link_basic_block(scope->r12, scope->jmp->const_value.value64 + (scope->is_neg_rsi ? -1 : 0), ret_addr);
- }
- break;
- }
- if (scope->is_neg_rsi)
- scope->rsi -= rsi_size + 1;
- else
- scope->rsi += rsi_size;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement