Rafael A. Pinto

12 papers C 10Journal 1Unranked 1
YearRankTypeTitle / Venue / Authors
2016 C conf
IAS
Vitor Cristiano Bender, Fernanda B. Mendes, Norton D. Barth, Rafael A. Pinto, Tiago B. Marchesan, José Marcos Alonso Alvarez
2015 C conf
IAS
Vitor Cristiano Bender, Norton D. Barth, Marina Camponogara, Rafael A. Pinto, Tiago B. Marchesan, J. Marcos Alonso
2015 conf
ISIE
Vitor Cristiano Bender, Norton D. Barth, Fernanda B. Mendes, Rafael A. Pinto, Tiago B. Marchesan, J. Marcos Alonso
2014 C conf
IAS
Rafael A. Pinto, J. Marcos Alonso, Marina S. Perdigão, Marcelo Freitas da Silva, Ricardo N. do Prado
2014 C conf
IAS
Marina S. Perdigão, Maikel Fernando Menke, Alysson R. Seidel, Rafael A. Pinto, José Marcos Alonso Alvarez
2012 C conf
IECON
Rafael A. Pinto, Priscila E. Bolzan, Ricardo N. do Prado
2012 J jnl
IEEE Trans. Ind. Electron.
Rafael A. Pinto, Marcelo R. Cosetin, Alexandre Campos, Marco A. Dalla Costa, Ricardo N. do Prado
2009 C conf
IAS
Gustavo Weber Denardin, Carlos Henrique Barriquello, Rafael A. Pinto, Marcelo Freitas da Silva, Alexandre Campos, Ricardo N. do Prado
2009 C conf
IAS
Marcelo Freitas da Silva, Gustavo Weber Denardin, Rafael A. Pinto, Juliano P. de Lopes, Mikhail Polonskii, Alysson R. Seidel, Ricardo N. do Prado
2009 C conf
IAS
Rafael A. Pinto, Marcelo R. Cosetin, Marcelo Freitas da Silva, Gustavo Weber Denardin, Alexandre Campos, Ricardo N. do Prado
2009 C conf
IAS
Juliano P. de Lopes, Marcelo Freitas da Silva, Rafael A. Pinto, Ricardo N. do Prado, Alysson R. Seidel
2008 C conf
IAS
Rafael A. Pinto, Marcelo R. Cosetin, Tiago B. Marchesan, Murilo Cervi, Alexandre Campos, Ricardo N. do Prado
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