Hamed Monkaresi

12 papers B 3Misc 2Journal 2Unranked 4
YearRankTypeTitle / Venue / Authors
2017 J jnl
IEEE Trans. Affect. Comput.
Hamed Monkaresi, Nigel Bosch, Rafael A. Calvo, Sidney K. D'Mello
2015 conf
BODYNETS
Hamed Monkaresi, Rafael A. Calvo
2014 J jnl
IEEE J. Biomed. Health Informatics
Hamed Monkaresi, Rafael A. Calvo, Hong Yan
2014 conf
ICSH
Letian Sun, Li Liu, Ye Wei, Jun Zhong, Dashi Luo, Ming Liu, Hamed Monkaresi
2014
Hamed Monkaresi
2014 Misc conf
FLAIRS
Hamed Monkaresi, M. Sazzad Hussain, Rafael A. Calvo
2012 conf
Australasian Conference on Artificial Intelligence
Hamed Monkaresi, M. Sazzad Hussain, Rafael A. Calvo
2012 B conf
AVI
Hamed Monkaresi, Rafael A. Calvo, M. Sazzad Hussain
2012 B conf
ITS
M. Sazzad Hussain, Hamed Monkaresi, Rafael A. Calvo
2012 B conf
SMC
Hamed Monkaresi, M. Sazzad Hussain, Rafael A. Calvo
2012 Misc conf
AusDM
M. Sazzad Hussain, Hamed Monkaresi, Rafael A. Calvo
2008 conf
ITNG
Ahmad Kardan, Hamed Monkaresi
redb/extractors/decompiler/bninja/analysis/medium_level_normalization.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level_normalization.py python
from binaryninja import (
    MediumLevelILInstruction,
    Variable, SSAVariable,
    ILIntrinsic,
)


class MediumLevelNormalization:
    def __init__(self):
        return

    def _collect_ops(self, il, ops):
        if il is None:
            return
        ops.append(int(il.operation))
        operands = getattr(il, "operands", None)
        if not operands:
            return
        for op in operands:
            if isinstance(op, MediumLevelILInstruction):
                self._collect_ops(op, ops)
            elif isinstance(op, (list, tuple)):
                for sub in op:
                    if isinstance(sub, MediumLevelILInstruction):
                        self._collect_ops(sub, ops)

    def normalize_instruction_all_levels(self, instr_il):
        ops = []
        self._collect_ops(instr_il, ops)
        return ops

    def _leaf_type(self, val):
        if isinstance(val, SSAVariable):
            return "SSA_VAR"
        if isinstance(val, Variable):
            return "VAR"
        if isinstance(val, ILIntrinsic):
            return "INTRINSIC"
        if isinstance(val, bool):
            return "BOOL"
        if isinstance(val, float):
            return "FLOAT_CONST"
        if isinstance(val, int):
            return "CONST"
        if isinstance(val, str):
            return "STR"
        return type(val).__name__.upper()

    def _collect(self, il, out_op):
        if il is None:
            return
        out_op.append(int(il.operation))
        operands = getattr(il, "operands", None)
        if not operands:
            return
        for op in operands:
            if isinstance(op, MediumLevelILInstruction):
                self._collect(op, out_op)
            elif isinstance(op, (list, tuple)):
                for sub in op:
                    if isinstance(sub, MediumLevelILInstruction):
                        self._collect(sub, out_op)
                    else:
                        out_op.append(self._leaf_type(sub))
            else:
                out_op.append(self._leaf_type(op))

    def normalize_instr_with_operands(self, instr_il):
        ops = []
        self._collect(instr_il, ops)
        return ops