Xiaofang Jin

11 papers B 1C 1Journal 3Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Mater. Continua
Xiaofang Jin, Yiran Li, Yuying Yang
2025 conf
SNPD-Summer
Xinyi Qi, Linzhen Li, Xiaofang Jin
2024 J jnl
CAAI Trans. Intell. Technol.
Xiaofang Jin, Jieyu Xiao, Libiao Jin, Xinruo Zhang
2024 C conf
SNPD
Chenxiao Li, Ding Yue, Xiaofang Jin
2023 conf
SNPD-Winter
Xiaofang Jin, Jinyu Liu, Ding Yue
2022 J jnl
CAAI Trans. Intell. Technol.
Xiaofang Jin, Yinan Wu, Ying Xu, Chang Sun
2021 conf
CSII
Xiaofang Jin, Yijia Xiao
2021 conf
CSII
Xiaofang Jin, Ziyi Sha
2020 conf
ICCT
Shufeng Li, Chang Sun, Xiaofang Jin
2014 B conf
DSAA
Min Shao, Xiaofang Jin, Libiao Jin
2013 conf
IIH-MSP
Xiaofang Jin, Yun Zhu, Libiao Jin, Mengxuan Liu, Yu Bai
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