Maja Sliskovic

12 papers B 1C 2Misc 1Journal 1Unranked 6
YearRankTypeTitle / Venue / Authors
2021 conf
ICIT
Christian Sauer, Eike Lyczkowski, Maja Sliskovic, Marco Schmidt
2020 conf
DIVANet
Christian Sauer, Marco Schmidt, Maja Sliskovic
2019 C conf
ETFA
Christian Sauer, Marco Schmidt, Maja Sliskovic
2019 J jnl
J. Commun.
Christian Sauer, Maja Sliskovic, Marco Schmidt
2019 C conf
ETFA
Christian Sauer, Maja Sliskovic, Marco Schmidt
2001 B conf
GLOBECOM
Maja Sliskovic
2001 conf
SIP
Maja Sliskovic
2001 conf
ICECS
Maja Sliskovic
2001
Maja Sliskovic
2000 conf
ICECS
Maja Sliskovic
1999 Misc conf
ICASSP
Maja Sliskovic
1999 conf
ICECS
Maja Sliskovic
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