Haixia Wu

35 papers Misc 3Journal 19Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
Data Sci. Eng.
Lin Zhang, Yahong Lian, Haixia Wu, Chunyao Song, Xiaojie Yuan
2024 conf
ICPCSEE (2)
Jishun Liu, Liang Shen, Haixia Wu, Bei Lin, Zhipeng Cui
2024 J jnl
IEEE Trans. Medical Imaging
Zhijie Wen, Haixia Wu, Shihui Ying
2022 J jnl
IEEE Signal Process. Lett.
Zhe Peng, Yingtao Ding, Shiwei Ren, Haixia Wu, Weijiang Wang
2022 J jnl
Data Sci. Eng.
Haixia Wu, Chunyao Song, Yao Ge, Tingjian Ge
2021 J jnl
Inf. Sci.
Chunyao Song, Yao Ge, Tingjian Ge, Haixia Wu, Zhutian Lin, Hong Kang, Xiaojie Yuan
2020 conf
EMBC
Haixia Wu, Ruturaj Gole, Subho Ghosh, Anup Basu
2020 conf
SAM
Shiwei Ren, Wentao Dong, Xiangnan Li, Su Yan, Haixia Wu, Weijiang Wang
2020 J jnl
Neural Comput. Appl.
Yan Ge, Haixia Wu
2019 J jnl
CoRR
Ruturaj Gole, Haixia Wu, Subho Ghose
2018 conf
ICSPCC
Dahao Jian, Haixia Wu, Wei Gao, Rongkun Jiang
2018 conf
CCIS
Jin Zhuo, Hua Dang, Haixia Wu, Haojun Pang
2018 J jnl
J. Real Time Image Process.
Shih-Lun Chen, Jing Nie, Ting-Lan Lin, Rih-Lung Chung, Chih-Hsien Hsia, Tse-Yen Liu, Szu-Yin Lin, Haixia Wu
2017 conf
ICAIT
Lixing Tang, Haixia Wu, Rongkun Jiang, Chang Lu
2015 J jnl
Neurocomputing
Wei Feng, Simon X. Yang, Haixia Wu
2014 J jnl
Neural Comput. Appl.
Wei Feng, Simon X. Yang, Haixia Wu
2014 J jnl
J. Networks
Wei Feng, Haixia Wu
2013 Misc conf
CISIS
Trong-Yen Lee, Nian-You Lin, Wei-Cheng Chen, Haixia Wu
2013 Misc conf
CISIS
Trong-Yen Lee, Min-Jea Liu, Chia-Chen Fan, Chia-Chun Tsai, Haixia Wu
2012 J jnl
Int. J. Comput. Math.
Wei Feng, Simon X. Yang, Haixia Wu
2011 J jnl
Inf. Sci.
Zhengxia Wang, Xiaofeng Liao, Songtao Guo, Haixia Wu
2011 J jnl
Int. J. Comput. Math.
Wei Feng, Simon X. Yang, Haixia Wu
2010 Misc conf
GrC
Songjian Dan, Haixia Wu
2010 J jnl
Int. J. Softw. Sci. Comput. Intell.
Wei Feng, Haixia Wu
2010 J jnl
Inf. Sci.
Haixia Wu, Xiaofeng Liao, Wei Feng, Songtao Guo, Wei Zhang
2009 conf
IEEE ICCI
Haixia Wu, Wei Zhang, Wei Feng, Jun Peng
2009 conf
IEEE ICCI
Wei Feng, Wei Zhang, Haixia Wu, Jun Peng
2009 conf
ICNC (3)
Wei Feng, Haixia Wu, Wei Zhang
2009 J jnl
Neurocomputing
Haixia Wu, Xiaofeng Liao, Songtao Guo, Wei Feng, Zhengxia Wang
2008 J jnl
Appl. Math. Lett.
Peiguang Wang, Haixia Wu, Yonghong Wu
2008 J jnl
Comput. Math. Appl.
Peiguang Wang, Haixia Wu, Yonghong Wu
2008 conf
ICNC (2)
Wei Feng, Wei Zhang, Haixia Wu
2008 conf
ICNC (2)
Zhengxia Wang, Jiali Mao, Guodong Liu, Haixia Wu
2008 conf
ISNN (1)
Wei Feng, Haixia Wu, Wei Zhang
2008 conf
ICNC (2)
Haixia Wu, Wei Feng, Wei Zhang
redb/extractors/decompiler/bninja/analysis/medium_level.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level.py python
import time

from binaryninja import (
    MediumLevelILOperation as MLIL_OP,
)

try:
    from ..function_type import FunctionTypeAnalysis
    from ..similarity.minhasher import MinHasher, TokenKind
    from ..utils.hashes import calculate_sha256, calculate_tlsh
    from .medium_level_normalization import MediumLevelNormalization
except ImportError:
    from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import MediumLevelNormalization
    from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh


_MLIL_CALL_OPS = (
    MLIL_OP.MLIL_CALL,
    MLIL_OP.MLIL_CALL_SSA,
    MLIL_OP.MLIL_CALL_UNTYPED,
    MLIL_OP.MLIL_CALL_UNTYPED_SSA,
    MLIL_OP.MLIL_TAILCALL,
    MLIL_OP.MLIL_TAILCALL_SSA,
    MLIL_OP.MLIL_TAILCALL_UNTYPED,
    MLIL_OP.MLIL_TAILCALL_UNTYPED_SSA,
)

_MLIL_CONTROL_FLOW_OPS = (
    MLIL_OP.MLIL_IF,
    MLIL_OP.MLIL_GOTO,
    MLIL_OP.MLIL_JUMP,
    MLIL_OP.MLIL_JUMP_TO,
    MLIL_OP.MLIL_RET,
    MLIL_OP.MLIL_RET_HINT,
    MLIL_OP.MLIL_NORET,
) + _MLIL_CALL_OPS


class MediumLevelAnalysis:
    def __init__(self, function, bv, logger):
        self.function = function
        self.name = function.name
        self.start = function.start
        self.mlil_func = function.mlil
        self.bv = bv
        self.logger = logger
        self.errors = []

    def log_error(self, message, function_name, address, exception=None, error_location="unknown"):
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def _collect_mlil_skeleton_and_typed(self):
        mlil = self.mlil_func
        if not mlil:
            return [], [], [], []

        start = self.start
        norm = MediumLevelNormalization()

        skeleton = []
        skeleton_with_addr = []
        typed = []
        typed_with_addr = []

        for il in mlil.instructions:
            skel_norm = norm.normalize_instruction_all_levels(il)
            typed_norm = norm.normalize_instr_with_operands(il)

            skeleton.append(skel_norm)
            typed.append(typed_norm)

            offset = il.address - start
            if offset < 0:
                offset = 0

            skeleton_with_addr.append((offset, skel_norm))
            typed_with_addr.append((offset, typed_norm))

        return skeleton, skeleton_with_addr, typed, typed_with_addr

    def analyze(self):
        (
            instr_skeleton,
            body_mlil_skeleton_vector,
            instr_typed,
            body_mlil_typed_vector,
        ) = self._collect_mlil_skeleton_and_typed()

        instr_skeleton_str = str(instr_skeleton)
        sha256_skeleton = calculate_sha256(instr_skeleton_str)
        tlsh_skeleton = calculate_tlsh(instr_skeleton_str)

        instr_typed_str = str(instr_typed)
        sha256_typed = calculate_sha256(instr_typed_str)
        tlsh_typed = calculate_tlsh(instr_typed_str)

        seed = 0xdeadbeef
        minhash_mlil_skeleton = MinHasher(seed, self.mlil_func, TokenKind.MLIL).calculateMinHash()
        minhash_mlil_typed = MinHasher(seed, self.mlil_func, TokenKind.TYPED_MLIL).calculateMinHash()

        medium_level_json = {
            "function_address": self.start,
            "body_mlil_skeleton_vector": body_mlil_skeleton_vector,
            "sha256_mlil_skeleton": sha256_skeleton,
            "tlsh_mlil_skeleton": tlsh_skeleton,
            "minhash_mlil_skeleton": minhash_mlil_skeleton,
            "body_mlil_typed_vector": body_mlil_typed_vector,
            "sha256_mlil_typed": sha256_typed,
            "tlsh_mlil_typed": tlsh_typed,
            "minhash_mlil_typed": minhash_mlil_typed,
        }

        return medium_level_json, self.errors