Olufemi Komolafe

13 papers A* 1B 1C 1Journal 3Unranked 7
YearRankTypeTitle / Venue / Authors
2023 conf
QuNet@SIGCOMM
Dmitry Lyssenko, Olufemi Komolafe
2023 conf
FIRA@SIGCOMM
Mircea M. Iordache-Sica, Tula Kraiser, Olufemi Komolafe
2017 B conf
IM
Olufemi Komolafe
2009 J jnl
RFC
Seisho Yasukawa, Adrian Farrel, Olufemi Komolafe
2008 C conf
BROADNETS
Olufemi Komolafe, Joe Sventek
2007 J jnl
IEEE/ACM Trans. Netw.
Olufemi Komolafe, David A. Harle
2007 conf
ICC
Olufemi Komolafe, Joseph S. Sventek
2005 A* conf
INFOCOM
Olufemi Komolafe, Joseph S. Sventek
2003 J jnl
Comput. Networks
Olufemi Komolafe, David A. Harle
2002 conf
ONDM
Olufemi Komolafe, David A. Harle, David Cotter
2002 conf
ICC
Olufemi Komolafe, David A. Harle, David Cotter
2001 conf
ONDM
Olufemi Komolafe, David A. Harle, David Cotter
2001 conf
ICC
Olufemi Komolafe, David A. Harle, David Cotter
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