Allow to specific maturities at a instruction simplification rule level
This commit is contained in:
@@ -3,6 +3,7 @@ import os
|
|||||||
from d810.ast import minsn_to_ast
|
from d810.ast import minsn_to_ast
|
||||||
from d810.hexrays_formatters import format_minsn_t, format_mop_t, maturity_to_string
|
from d810.hexrays_formatters import format_minsn_t, format_mop_t, maturity_to_string
|
||||||
|
|
||||||
|
from d810.optimizers.handler import DEFAULT_INSTRUCTION_MATURITIES
|
||||||
from d810.optimizers.instructions.analysis.handler import InstructionAnalysisRule
|
from d810.optimizers.instructions.analysis.handler import InstructionAnalysisRule
|
||||||
from d810.optimizers.instructions.analysis.utils import get_possible_patterns
|
from d810.optimizers.instructions.analysis.utils import get_possible_patterns
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ class ExampleGuessingRule(InstructionAnalysisRule):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self.maturities = DEFAULT_INSTRUCTION_MATURITIES
|
||||||
self.cur_maturity = None
|
self.cur_maturity = None
|
||||||
self.min_nb_var = 1
|
self.min_nb_var = 1
|
||||||
self.max_nb_var = 3
|
self.max_nb_var = 3
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import logging
|
|||||||
from typing import List
|
from typing import List
|
||||||
from ida_hexrays import *
|
from ida_hexrays import *
|
||||||
|
|
||||||
from d810.optimizers.handler import OptimizationRule, DEFAULT_INSTRUCTION_MATURITIES
|
from d810.optimizers.handler import OptimizationRule
|
||||||
from d810.hexrays_formatters import format_minsn_t
|
from d810.hexrays_formatters import format_minsn_t
|
||||||
from d810.ast import minsn_to_ast, AstNode
|
from d810.ast import minsn_to_ast, AstNode
|
||||||
from d810.errors import D810Exception
|
from d810.errors import D810Exception
|
||||||
@@ -16,7 +16,7 @@ optimizer_logger = logging.getLogger('D810.optimizer')
|
|||||||
class InstructionOptimizationRule(OptimizationRule):
|
class InstructionOptimizationRule(OptimizationRule):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.maturities = DEFAULT_INSTRUCTION_MATURITIES
|
self.maturities = []
|
||||||
|
|
||||||
def check_and_replace(self, blk, ins):
|
def check_and_replace(self, blk, ins):
|
||||||
return None
|
return None
|
||||||
@@ -97,6 +97,8 @@ class InstructionOptimizer(object):
|
|||||||
if not is_valid_rule_class:
|
if not is_valid_rule_class:
|
||||||
return False
|
return False
|
||||||
optimizer_logger.debug("Adding rule {0}".format(rule))
|
optimizer_logger.debug("Adding rule {0}".format(rule))
|
||||||
|
if len(rule.maturities) == 0:
|
||||||
|
rule.maturities = self.maturities
|
||||||
self.rules.add(rule)
|
self.rules.add(rule)
|
||||||
self.rules_usage_info[rule.name] = 0
|
self.rules_usage_info[rule.name] = 0
|
||||||
return True
|
return True
|
||||||
@@ -114,9 +116,11 @@ class InstructionOptimizer(object):
|
|||||||
def get_optimized_instruction(self, blk: mblock_t, ins: minsn_t):
|
def get_optimized_instruction(self, blk: mblock_t, ins: minsn_t):
|
||||||
if blk is not None:
|
if blk is not None:
|
||||||
self.cur_maturity = blk.mba.maturity
|
self.cur_maturity = blk.mba.maturity
|
||||||
if self.cur_maturity not in self.maturities:
|
# if self.cur_maturity not in self.maturities:
|
||||||
return None
|
# return None
|
||||||
for rule in self.rules:
|
for rule in self.rules:
|
||||||
|
if self.cur_maturity not in rule.maturities:
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
new_ins = rule.check_and_replace(blk, ins)
|
new_ins = rule.check_and_replace(blk, ins)
|
||||||
if new_ins is not None:
|
if new_ins is not None:
|
||||||
|
|||||||
Reference in New Issue
Block a user