R. Akhilesh Reddy

11 papers Unranked 11
YearRankTypeTitle / Venue / Authors
2024 conf
IC3I
Muthuswamy Jayanthi, Pendyala Shamili Srimani, Manish Gupta, Hazim Y. Saeed, V. Keerthi, R. Akhilesh Reddy
2024 conf
IC3I
S. P. Sreeja, D. Sreenivasulu, Alok Jain, R. Akhilesh Reddy, Fatimah Dhari Jabbar, V. Keerthi
2024 conf
IC3I
Gulshan Dhasmana, Hassan M. Al-Jawahry, A Deepak, K. Aravind, R. Akhilesh Reddy, Kanchan Yadav
2024 conf
IC3I
Mudit Mittal, Hassan M. Al-Jawahry, Neeraj Varshney, Sunil Prashanth Kumar, Jacob Michaelson, R. Akhilesh Reddy
2024 conf
IC3I
Rakesh Chandrashekar, Kirana Kumar, Sorabh Lakhanpal, V. Keerthi, Hazim Y. Saeed, R. Akhilesh Reddy
2024 conf
IC3I
Rakesh Chandrashekar, Kirana Kumar, Sorabh Lakhanpal, K. Smitha, R. Akhilesh Reddy, Ali Albawi
2024 conf
IC3I
Arnav Kotiyal, Layth Hussein, A Deepak, Aryan Rana, Manjunatha, Krishna Kant Dixit, R. Akhilesh Reddy
2024 conf
IC3I
Mudit Mittal, Hassan M. Al-Jawahry, Neeraj Varshney, Sunil Prashanth Kumar, Jacob Michaelson, R. Akhilesh Reddy
2024 conf
IC3I
Sunil Prashanth Kumar, P. Aswini, Har Pal Thethi, K. Smitha, R. Akhilesh Reddy, Ali Albawi
2024 conf
IC3I
Ta Sudarshan, Yagateela Pandu Rangaiah, Amandeep Nagpal, K. Smitha, R. Akhilesh Reddy, Ali Albawi
2024 conf
IC3I
Himanshu Rai Goyal, Mohammed Al-Farouni, A Deepak, R. Akhilesh Reddy, Kanchan Yadav, V. Revathi
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