Haixia He

13 papers C 1Misc 1Journal 6Unranked 5
YearRankTypeTitle / Venue / Authors
2021 J jnl
Digit. Commun. Networks
Yuan Gao, Haixia He, Rongjun Tan, Junho Choi
2019 J jnl
Neurocomputing
Peng Zhang, Haixia He, Lianru Gao
2018 J jnl
Remote. Sens.
Weitao Chen, Xianju Li, Haixia He, Lizhe Wang
2018 J jnl
Remote. Sens.
Weitao Chen, Xianju Li, Haixia He, Lizhe Wang
2018 J jnl
IEEE Access
Yuan Gao, Haixia He, Zhixiang Deng, Xuewu Zhang
2018 Misc conf
ICCS
Haixia He, Yuan Gao, Rongjun Tan, Zhixiang Deng
2018 conf
DSP
Ping Wang, Aimin Jiang, Yuan Cao, Yuan Gao, Rongjun Tan, Haixia He, Mingrui Zhou
2018 conf
AsianHOST
Rongjun Tan, Yuan Gao, Haixia He, Yuan Cao
2017 J jnl
ISPRS Int. J. Geo Inf.
Suju Li, Yan Cui, Ming Liu, Haixia He, Shirish Ravan
2016 C conf
IGARSS
Yida Fan, Wei Wu, Ming Liu, Suju Li, Haixia He, Yang Shu
2016 conf
ICIC (3)
Peng Zhang, Chunbo Fan, Haixia He, He Huang
2015 conf
ICIC (1)
Peng Zhang, Haixia He, Zhou Sun, Chunbo Fan
2009 conf
IGARSS (3)
Haixia He, Bing Zhang, Zhengchao Chen, Ru Li
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