M. E. Jernigan

13 papers B 4Misc 4Journal 5
YearRankTypeTitle / Venue / Authors
2000 B conf
ICIP
Slawo Wesolkowski, M. E. Jernigan, Robert D. Dony
2000 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Lowell L. Winger, John A. Robinson, M. E. Jernigan
1992 Misc conf
ICASSP
Gerard F. McLean, E. D. Graham, M. E. Jernigan
1990 Misc conf
ICASSP
L. Hodgson, M. E. Jernigan, Barry L. Wills
1990 J jnl
Comput. Vis. Graph. Image Process.
Song-Sheng Liu, M. E. Jernigan
1989 B conf
SMC
Rajesh Jha, M. E. Jernigan
1989 B conf
SMC
M. E. Jernigan, R. J. Belshaw, Gerard F. McLean
1989 Misc conf
ICASSP
C. R. Moloney, M. E. Jernigan
1989 B conf
SMC
Timothy N. Topper, M. E. Jernigan
1988 J jnl
Comput. Vis. Graph. Image Process.
Gerard F. McLean, M. E. Jernigan
1988 Misc conf
ICASSP
S. Seetharaman, M. E. Jernigan
1984 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
M. E. Jernigan, F. D'Astous
1982 J jnl
IEEE Trans. Computers
Peter R. Roeser, M. E. Jernigan
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