Rahmat Heidari

16 papers Journal 7Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Jiawei Zhang, Gregor Verbic, Frederik Geth, Mohsen Aldaadi, Rahmat Heidari, Julio H. Braslavsky
2025 J jnl
CoRR
Marta Vanin, Frederik Geth, Rahmat Heidari, Dirk Van Hertem
2025 J jnl
CoRR
Matthew Deakin, Rahmat Heidari, Xu Deng
2025 J jnl
CoRR
Ghulam Mohy-ud-din, Yunqi Wang, Rahmat Heidari, Frederik Geth
2023 conf
ISGT Asia
Rahmat Heidari, Matthew Amos, Frederik Geth
2022 conf
e-Energy
Frederik Geth, Rahmat Heidari, Arpan Koirala
2017 conf
CDC
Rahmat Heidari, Julio H. Braslavsky, María M. Seron
2017 conf
ANZCC
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2017 J jnl
Autom.
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2016 J jnl
IEEE Trans. Autom. Control.
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2015 conf
AuCC
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2015 conf
CDC
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2014 J jnl
CoRR
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2014 conf
AuCC
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
2013 conf
ECC
Rahmat Heidari, María M. Seron, Julio H. Braslavsky, Hernan Haimovich
2013 conf
AuCC
Rahmat Heidari, María M. Seron, Julio H. Braslavsky
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