Raja Khurram Shahzad

12 papers B 4Misc 1Journal 2Unranked 4
YearRankTypeTitle / Venue / Authors
2024
Raja Khurram Shahzad
2023 B conf
EC-TEL
Raja Khurram Shahzad, Erik Ström, Peter Mozelius
2018 conf
DASC/PiCom/DataCom/CyberSciTech
Raja Khurram Shahzad
2016 J jnl
Int. J. Data Min. Bioinform.
Borong Shao, Niklas Lavesson, Veselka Boeva, Raja Khurram Shahzad
2015 conf
MOD
Raja Khurram Shahzad, Mehwish Fatima, Niklas Lavesson, Martin Boldt
2013 J jnl
J. Wirel. Mob. Networks Ubiquitous Comput. Dependable Appl.
Raja Khurram Shahzad, Niklas Lavesson
2012 B conf
ARES
Raja Khurram Shahzad, Niklas Lavesson
2011 B conf
ARES
Raja Khurram Shahzad, Niklas Lavesson, Henric Johnson
2011 conf
ISSA
Raja Khurram Shahzad, Niklas Lavesson
2011 conf
SCAI
Raja Khurram Shahzad, Niklas Lavesson
2011 Misc conf
FIT
Atique Zafar, Sajad Ali, Raja Khurram Shahzad
2010 B conf
ARES
Raja Khurram Shahzad, Syed Imran Haider, Niklas Lavesson
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