Ramin A. Nobakht

11 papers Misc 5Journal 5Unranked 1
YearRankTypeTitle / Venue / Authors
1995 J jnl
IBM J. Res. Dev.
Ramin A. Nobakht
1995 J jnl
IBM J. Res. Dev.
Ramin A. Nobakht
1995 J jnl
IEEE Trans. Commun.
Ramin A. Nobakht, M. Reha Civanlar
1994 conf
ICASSP (3)
Ramin A. Nobakht
1993 J jnl
IEEE Trans. Signal Process.
Ramin A. Nobakht, Sasan H. Ardalan, David E. van den Bout
1992 Misc conf
ICASSP
Ramin A. Nobakht
1991 Misc conf
ICASSP
Ramin A. Nobakht, Sasan H. Ardalan, David E. van den Bout
1990 J jnl
IEEE J. Sel. Areas Commun.
Ramin A. Nobakht, David E. van den Bout, J. Keith Townsend, Sasan H. Ardalan
1990 Misc conf
ICASSP
Ramin A. Nobakht, David E. van den Bout, J. Keith Townsend, Sasan H. Ardalan
1988 Misc conf
ICASSP
M. Reha Civanlar, Ramin A. Nobakht
1987 Misc conf
ICASSP
Ramin A. Nobakht, Sarah A. Rajala
redb/extractors/decompiler/bninja/analysis/low_level_normalization.py
← Index redb/extractors/decompiler/bninja/analysis/low_level_normalization.py python
from binaryninja import (
    ILRegister, ILRegisterStack, ILFlag,
    ILIntrinsic, ILSemanticFlagGroup,
)

class LowLevelNormalization:
    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 hasattr(op, "operation"):
                self._collect_ops(op, ops)
            elif isinstance(op, (list, tuple)):
                for sub in op:
                    if hasattr(sub, "operation"):
                        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, ILRegister):
            return "REG"
        if isinstance(val, ILRegisterStack):
            return "REG_STACK"
        if isinstance(val, ILFlag):
            return "FLAG"
        if isinstance(val, ILSemanticFlagGroup):
            return "FLAG_GROUP"
        if isinstance(val, ILIntrinsic):
            return "INTRINSIC"
        if isinstance(val, bool):
            return "BOOL"
        if isinstance(val, int):
            return "CONST"
        return type(val).__name__.upper()

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

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