Radu Muschevici

13 papers A 1B 3Journal 2Unranked 7
YearRankTypeTitle / Venue / Authors
2017 conf
SEFM Workshops
Moh. Afifun Naily, Maya Retno Ayu Setyautami, Radu Muschevici, Ade Azurat
2017 B conf
IFM
Ferruccio Damiani, Michael Lienhardt, Radu Muschevici, Ina Schaefer
2016 B conf
SPLC
Maya R. A. Setyautami, Reiner Hähnle, Radu Muschevici, Ade Azurat
2016 J jnl
Softw. Syst. Model.
Radu Muschevici, José Proença, Dave Clarke
2016 conf
ISoLA (2)
Reiner Hähnle, Radu Muschevici
2013 conf
FOSD
Radu Muschevici, Dave Clarke, José Proença
2012 conf
VaMoS
Michiel Helvensteijn, Radu Muschevici, Peter Y. H. Wong
2012 J jnl
Int. J. Softw. Tools Technol. Transf.
Peter Y. H. Wong, Elvira Albert, Radu Muschevici, José Proença, Jan Schäfer, Rudolf Schlatte
2011 B conf
SEFM
Radu Muschevici, José Proença, Dave Clarke
2010 conf
SPLC Workshops
Radu Muschevici, Dave Clarke, José Proença
2010 conf
FMCO
Dave Clarke, Radu Muschevici, José Proença, Ina Schaefer, Rudolf Schlatte
2008 conf
IFIP Int. Conf. Digital Forensics
Christian Seifert, Barbara Endicott-Popovsky, Deborah A. Frincke, Peter Komisarczuk, Radu Muschevici, Ian Welch
2008 A conf
OOPSLA
Radu Muschevici, Alex Potanin, Ewan D. Tempero, James Noble
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