Hai Liu

54 papers C 3Misc 1Journal 30Unranked 20
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Shuai You, Cuiqun Chen, Yujian Feng, Hai Liu, Yimu Ji, Mang Ye
2025 conf
WWW (Companion Volume)
Junfeng Wu, Jing He, Hai Liu, Zhaoqi Zheng, Yichen Cao, Xingguo Chen, Bingjie Zou, Ruiping Zou, Guohua Zhou, David Sturgess, André Van Zundert
2024 J jnl
IEEE Trans. Netw. Sci. Eng.
Hao Cheng, Chaobo He, Hai Liu, Xingyu Liu, Peng Yu, Qimai Chen
2024 J jnl
IEEE Trans. Consumer Electron.
Kairong Hu, Xiaozhi Zhu, Hai Liu, Yingying Qu, Fu Lee Wang, Tianyong Hao
2024 conf
NCAA (3)
Jingjing Lan, Rongjiao Liang, Hai Liu, Chaobo He, Tianyong Hao
2024 J jnl
IEEE Trans. Consumer Electron.
Guanhua Chen, Qiqi Xu, Choujun Zhan, Fu Lee Wang, Kai Liu, Hai Liu, Tianyong Hao
2024 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Zhipeng Liu, Jing He, Tao Gong, Heng Weng, Fu Lee Wang, Hai Liu, Tianyong Hao
2024 J jnl
World Wide Web (WWW)
Hai Liu, Xiaozhi Zhu, Yong Tang, Chaobo He, Tianyong Hao
2024 J jnl
Big Data Res.
Jiaxing Yan, Hai Liu, Zhiqi Lei, Yanghui Rao, Guan Liu, Haoran Xie, Xiaohui Tao, Fu Lee Wang
2023 conf
NCAA (2)
Qiqi Xu, Guanhua Chen, Lan Shuai, Shi Pu, Hai Liu, Tianyong Hao
2023 conf
NCAA (2)
Guanhua Chen, Qiqi Xu, Choujun Zhan, Fu Lee Wang, Kuanyan Zhu, Hai Liu, Tianyong Hao
2023 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Yuanxia Liu, Tianyong Hao, Hai Liu, Yuanyuan Mu, Heng Weng, Fu Lee Wang
2022 conf
NAACL-HLT (Findings)
Xiaozhi Zhu, Tianyong Hao, Sijie Cheng, Fu Lee Wang, Hai Liu
2022 J jnl
Trans. Emerg. Telecommun. Technol.
Dingding Li, Ronghua Lin, Lijie Tang, Hai Liu, Yong Tang
2022 J jnl
Inf. Sci.
Chaobo He, Yulong Zheng, Junwei Cheng, Yong Tang, Guohua Chen, Hai Liu
2021 J jnl
Neural Comput. Appl.
Hai Liu, Kairong Hu, Fu Lee Wang, Tianyong Hao
2021 conf
NLPCC (2)
Xiaozhi Zhu, Leung-Pun Wong, Lap-Kei Lee, Hai Liu, Tianyong Hao
2021 J jnl
Neural Comput. Appl.
Kairong Hu, Hai Liu, Choujun Zhan, Yong Tang, Tianyong Hao
2021 J jnl
Trans. Emerg. Telecommun. Technol.
Wande Chen, Zhenke Chen, Dingding Li, Hai Liu, Yong Tang
2021 J jnl
CCF Trans. High Perform. Comput.
Zhenke Chen, Dingding Li, Zhiwen Wang, Hai Liu, Yong Tang
2021 J jnl
Future Gener. Comput. Syst.
Chaobo He, Hai Liu, Yong Tang, Shuangyin Liu, Xiang Fei, Qiwei Cheng, Hanchao Li
2021 conf
SETE
Qiqi Xu, Jinlin Li, Hai Liu, Tianyong Hao
2020 conf
NCAA
Kairong Hu, Hai Liu, Choujun Zhan, Yong Tang, Tianyong Hao
2020 J jnl
Complex.
Hai Liu, Yuanxia Liu, Leung-Pun Wong, Lap-Kei Lee, Tianyong Hao
2020 conf
NCAA
Yuanxia Liu, Hai Liu, Leung-Pun Wong, Lap-Kei Lee, Haijun Zhang, Tianyong Hao
2020 J jnl
Neural Comput. Appl.
Hai Liu, Kairong Hu, Fu Lee Wang, Tianyong Hao
2020 J jnl
IEEE Trans. Comput. Soc. Syst.
Zhenhua Huang, Xiaolong Lin, Hai Liu, Bo Zhang, Yunwen Chen, Yong Tang
2020 conf
ICIAI
Yue Wang, Qimai Chen, Chaobo He, Hai Liu, Xiyu Wu
2020 J jnl
IEEE Access
Chaobo He, Hai Liu, Yong Tang, Xiang Fei, Hanchao Li, Qiong Zhang
2019 conf
NLPCC (1)
Kairong Hu, Hai Liu, Tianyong Hao
2019 Misc conf
WISA
Heng-Xi Pan, Hai Liu, Yong Tang
2019 J jnl
IEEE Access
Zhenhua Huang, Chang Yu, Juan Ni, Hai Liu, Chun Zeng, Yong Tang
2019 J jnl
IEEE Access
Chaobo He, Qiong Zhang, Yong Tang, Shuangyin Liu, Hai Liu
2019 conf
HCC
Ronghua Lin, Chengjie Mao, Chaodan Mao, Rui Zhang, Hai Liu, Yong Tang
2018 conf
SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI
Zuoxi Yang, Dingding Li, Ronghua Lin, Yong Tang, Weiling Li, Hai Liu
2018 conf
ICCCS (1)
Dingding Li, Wande Chen, Mingming Pan, He Li, Hai Liu, Yong Tang
2018 J jnl
J. Supercomput.
Chaobo He, Xiang Fei, Hanchao Li, Yong Tang, Hai Liu, Shuangyin Liu
2018 conf
SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI
Dingding Li, Wande Chen, Zhengyang Wu, Hai Liu, Yong Tang
2018 J jnl
计算机科学
Mingming Pan, Dingding Li, Yong Tang, Hai Liu
2017 conf
ICEBE
Chaobo He, Xiang Fei, Hanchao Li, Yong Tang, Hai Liu, Qimai Chen
2017 conf
ChineseCSCW
Jiwei Liu, Dingding Li, Chengzhe Yuan, Hai Liu, Yang Tang
2017 C conf
CollaborateCom
Chengzhe Yuan, Dingding Li, Jia Zhu, Yong Tang, Shahbaz Hassan Wasti, Chaobo He, Hai Liu, Ronghua Lin
2017 conf
CBD
Chaobo He, Xiang Fei, Hanchao Li, Hai Liu, Yong Tang, Qimai Chen
2017 conf
ISPA/IUCC
Dingding Li, Xiaojia Tian, Sihua Huang, Hai Liu, Yong Tang, Deze Zeng
2016 J jnl
计算机科学
Huiyou Hua, Qimai Chen, Hai Liu, Yang Zhang, Peiquan Yuan
2015 J jnl
World Wide Web
Guangyan Huang, Jing He, Yanchun Zhang, Wanlei Zhou, Hai Liu, Peng Zhang, Zhiming Ding, Yue You, Jian Cao
2014 J jnl
J. Softw.
Yi-Mu Ji, Jie Tan, Hai Liu, Yan-peng Sun, Jia-bang Kang, Zizhuo Kuang, Chuanxin Zhao
2013 conf
WISE Workshops
Yi-Mu Ji, Jia-bang Kang, Hai Liu, Qiao-yu Pan, Yan-peng Sun, Zizhuo Kuang, Chuanxin Zhao
2013 J jnl
Inf. Sci.
Yuncheng Jiang, Yong Tang, Hai Liu, Zhenzhou Chen
2011 J jnl
Knowl. Based Syst.
Yuncheng Jiang, Yong Tang, Qimai Chen, Hai Liu, Jianchao Tang
2011 J jnl
Math. Comput. Model.
Yuncheng Jiang, Hai Liu, Yong Tang, Qimai Chen
2010 J jnl
Comput. Math. Appl.
Yuncheng Jiang, Yong Tang, Qimai Chen, Hai Liu, Jianchao Tang
2009 C conf
CSCWD
Jun Zhu, Yong Tang, Jianguo Li, Hai Liu
2007 C conf
CSCWD
Hai Liu, Yong Tang, Qimai Chen
tests/unit/conftest_binja_stubs.py
← Index tests/unit/conftest_binja_stubs.py python
"""Stubs for binaryninja module so decompiler unit tests can import
without a Binary Ninja license."""

import sys
from unittest.mock import MagicMock
from enum import IntEnum


# Stub binaryninja.enums
class BranchType(IntEnum):
    UnconditionalBranch = 0
    FalseBranch = 1
    TrueBranch = 2
    CallDestination = 3
    FunctionReturn = 4
    SystemCall = 5
    IndirectBranch = 6
    ExceptionBranch = 7
    UnresolvedBranch = 8
    UserDefinedBranch = 9


class InstructionTextTokenType(IntEnum):
    TextToken = 0
    InstructionToken = 1
    RegisterToken = 2
    IntegerToken = 3
    PossibleAddressToken = 4
    BeginMemoryOperandToken = 10
    EndMemoryOperandToken = 11
    FloatingPointToken = 12
    AnnotationToken = 13
    CodeRelativeAddressToken = 14
    ArgumentNameToken = 15
    HexDumpByteValueToken = 16
    HexDumpSkippedByteToken = 17
    HexDumpInvalidByteToken = 18
    HexDumpTextToken = 19
    OpcodeToken = 20
    StringToken = 21
    CharacterConstantToken = 22
    KeywordToken = 23
    TypeNameToken = 24
    FieldNameToken = 25
    NameSpaceToken = 26
    NameSpaceSeparatorToken = 27
    TagToken = 28
    StructOffsetToken = 29
    StructOffsetByteValueToken = 30
    StructureHexDumpTextToken = 31
    GotoLabelToken = 32
    CommentToken = 33
    PossibleValueToken = 34
    PossibleValueTypeToken = 35
    ArrayIndexToken = 36
    IndentationToken = 37
    UnknownMemoryToken = 38
    EnumerationMemberToken = 39
    OperationToken = 40
    BaseStructureOffsetToken = 41
    BaseStructureSeparatorToken = 42
    BraceToken = 43
    PlainTextToken = 44
    CollapsedInformationToken = 45


class SymbolType(IntEnum):
    FunctionSymbol = 0
    ImportAddressSymbol = 1
    ImportedFunctionSymbol = 2
    DataSymbol = 3
    ImportedDataSymbol = 4
    ExternalSymbol = 5
    LibraryFunctionSymbol = 6
    SymbolicFunctionSymbol = 7
    LocalLabelSymbol = 8


class HighLevelILOperation(IntEnum):
    HLIL_NOP = 0
    HLIL_ADD = 1
    HLIL_SUB = 2
    HLIL_MUL = 3
    HLIL_DIVS = 4
    HLIL_NEG = 5
    HLIL_NOT = 6
    HLIL_AND = 7
    HLIL_OR = 8
    HLIL_XOR = 9
    HLIL_LSR = 10
    HLIL_LSL = 11
    HLIL_MODS = 12
    HLIL_IF = 13
    HLIL_GOTO = 14
    HLIL_RET = 15
    HLIL_ASSIGN = 16
    HLIL_CALL = 17
    HLIL_VAR = 18
    HLIL_CONST = 19
    HLIL_BLOCK = 20


class LowLevelILOperation(IntEnum):
    LLIL_NOP = 0
    LLIL_SET_REG = 1
    LLIL_SET_REG_SPLIT = 2
    LLIL_SET_FLAG = 3
    LLIL_LOAD = 4
    LLIL_STORE = 5
    LLIL_PUSH = 6
    LLIL_POP = 7
    LLIL_REG = 8
    LLIL_CONST = 9
    LLIL_CONST_PTR = 10
    LLIL_FLAG = 11
    LLIL_FLAG_BIT = 12
    LLIL_ADD = 13
    LLIL_ADC = 14
    LLIL_SUB = 15
    LLIL_SBB = 16
    LLIL_AND = 17
    LLIL_OR = 18
    LLIL_XOR = 19
    LLIL_LSL = 20
    LLIL_LSR = 21
    LLIL_ASR = 22
    LLIL_ROL = 23
    LLIL_RLC = 24
    LLIL_ROR = 25
    LLIL_RRC = 26
    LLIL_MUL = 27
    LLIL_MULU_DP = 28
    LLIL_MULS_DP = 29
    LLIL_DIVU = 30
    LLIL_DIVU_DP = 31
    LLIL_DIVS = 32
    LLIL_DIVS_DP = 33
    LLIL_MODU = 34
    LLIL_MODS = 35
    LLIL_NEG = 36
    LLIL_NOT = 37
    LLIL_SX = 38
    LLIL_ZX = 39
    LLIL_LOW_PART = 40
    LLIL_JUMP = 41
    LLIL_JUMP_TO = 42
    LLIL_CALL = 43
    LLIL_CALL_SSA = 44
    LLIL_RET = 45
    LLIL_NORET = 46
    LLIL_IF = 47
    LLIL_GOTO = 48
    LLIL_FLAG_COND = 49
    LLIL_CMP_E = 50
    LLIL_CMP_NE = 51
    LLIL_CMP_SLT = 52
    LLIL_CMP_ULT = 53
    LLIL_CMP_SLE = 54
    LLIL_CMP_ULE = 55
    LLIL_CMP_SGE = 56
    LLIL_CMP_UGE = 57
    LLIL_CMP_SGT = 58
    LLIL_CMP_UGT = 59
    LLIL_TEST_BIT = 60
    LLIL_BOOL_TO_INT = 61
    LLIL_TAILCALL = 62
    LLIL_SYSCALL = 63
    LLIL_BP = 64
    LLIL_TRAP = 65
    LLIL_UNDEF = 66
    LLIL_UNIMPL = 67
    LLIL_UNIMPL_MEM = 68


class AnalysisState(IntEnum):
    IdleState = 0
    DisassembleState = 1
    AnalyzeState = 2


def install_binja_stubs():
    """Install binaryninja module stubs into sys.modules.
    Call this BEFORE importing any decompiler modules.
    Idempotent — returns the existing mock if already installed.
    """
    if "binaryninja" in sys.modules and not isinstance(sys.modules["binaryninja"], MagicMock):
        return sys.modules["binaryninja"]
    if "binaryninja" in sys.modules and hasattr(sys.modules["binaryninja"], "_redb_stub"):
        return sys.modules["binaryninja"]

    # Create the main mock
    bn_mock = MagicMock()
    bn_mock._redb_stub = True

    # Wire up enums as real enums (not mocks)
    enums_mod = MagicMock()
    enums_mod.BranchType = BranchType
    enums_mod.InstructionTextTokenType = InstructionTextTokenType
    enums_mod.SymbolType = SymbolType
    enums_mod.HighLevelILOperation = HighLevelILOperation
    enums_mod.LowLevelILOperation = LowLevelILOperation
    enums_mod.AnalysisState = AnalysisState

    bn_mock.enums = enums_mod
    bn_mock.enums.BranchType = BranchType
    bn_mock.enums.InstructionTextTokenType = InstructionTextTokenType
    bn_mock.enums.SymbolType = SymbolType
    bn_mock.enums.HighLevelILOperation = HighLevelILOperation
    bn_mock.enums.LowLevelILOperation = LowLevelILOperation
    bn_mock.enums.AnalysisState = AnalysisState

    # LowLevelILOperation on the top-level module
    bn_mock.LowLevelILOperation = LowLevelILOperation
    bn_mock.LowLevelILInstruction = MagicMock

    # highlevelil sub-module
    hlil_mod = MagicMock()
    hlil_mod.HighLevelILInstruction = type("HighLevelILInstruction", (), {})
    bn_mock.highlevelil = hlil_mod

    # lowlevelil sub-module
    llil_mod = MagicMock()
    llil_mod.LowLevelILAdd = type("LowLevelILAdd", (), {})
    llil_mod.LowLevelILConst = type("LowLevelILConst", (), {})
    llil_mod.LowLevelILConstPtr = type("LowLevelILConstPtr", (), {})
    llil_mod.LowLevelILLoad = type("LowLevelILLoad", (), {})
    llil_mod.LowLevelILLsl = type("LowLevelILLsl", (), {})
    llil_mod.LowLevelILMul = type("LowLevelILMul", (), {})
    llil_mod.LowLevelILPop = type("LowLevelILPop", (), {})
    llil_mod.LowLevelILPush = type("LowLevelILPush", (), {})
    llil_mod.LowLevelILReg = type("LowLevelILReg", (), {})
    llil_mod.LowLevelILStore = type("LowLevelILStore", (), {})
    llil_mod.LowLevelILSub = type("LowLevelILSub", (), {})
    bn_mock.lowlevelil = llil_mod

    # mediumlevelil sub-module
    mlil_mod = MagicMock()
    mlil_mod.MediumLevelILConst = type("MediumLevelILConst", (), {})
    mlil_mod.MediumLevelILConstPtr = type("MediumLevelILConstPtr", (), {})
    bn_mock.mediumlevelil = mlil_mod

    sys.modules["binaryninja"] = bn_mock
    sys.modules["binaryninja.enums"] = enums_mod
    sys.modules["binaryninja.lowlevelil"] = llil_mod
    sys.modules["binaryninja.highlevelil"] = hlil_mod
    sys.modules["binaryninja.mediumlevelil"] = mlil_mod

    return bn_mock


# ============================================================================
# Mock Factories
# ============================================================================

class MockToken:
    """Mock for instruction text tokens."""
    def __init__(self, text, token_type=None):
        self.text = text
        if token_type is None:
            self.type = InstructionTextTokenType.TextToken
        else:
            self.type = token_type

    def __str__(self):
        return self.text


class MockDisassemblyLine:
    """Mock for a disassembly text line."""
    def __init__(self, tokens=None):
        self.tokens = tokens or []

    def __str__(self):
        return "".join(t.text for t in self.tokens)


class MockEdge:
    """Mock for a basic block edge."""
    def __init__(self, source=None, target=None, edge_type=None):
        self.source = source
        self.target = target
        self.type = edge_type


class MockBasicBlock:
    """Mock for a basic block."""
    def __init__(
        self,
        start=0,
        end=0,
        disassembly_text=None,
        outgoing_edges=None,
        incoming_edges=None,
        dominators=None,
        post_dominators=None,
        dominance_frontier=None,
        dominator_tree_children=None,
        instruction_count=None,
    ):
        self.start = start
        self.end = end
        self.disassembly_text = disassembly_text or []
        self.outgoing_edges = outgoing_edges or []
        self.incoming_edges = incoming_edges or []
        self.dominators = dominators if dominators is not None else [self]
        self.post_dominators = post_dominators if post_dominators is not None else [self]
        self.dominance_frontier = dominance_frontier if dominance_frontier is not None else set()
        self.dominator_tree_children = dominator_tree_children or []
        self.instruction_count = instruction_count if instruction_count is not None else len(self.disassembly_text)

    def __iter__(self):
        return iter(self.disassembly_text)


class MockFunction:
    """Mock for a Binary Ninja function."""
    def __init__(
        self,
        name="sub_1000",
        start=0x1000,
        basic_blocks=None,
        instructions=None,
        hlil=None,
        llil=None,
        mlil=None,
        symbol=None,
        is_thunk=False,
        stack_adjustment=0,
        call_sites=None,
        caller_sites=None,
        low_level_il=None,
    ):
        self.name = name
        self.start = start
        self.basic_blocks = basic_blocks or []
        self._instructions = instructions or []
        self.hlil = hlil
        self.llil = llil
        self.mlil = mlil
        self.symbol = symbol
        self.is_thunk = is_thunk
        self.stack_adjustment = stack_adjustment
        self.call_sites = call_sites or []
        self.caller_sites = caller_sites or []
        self.low_level_il = low_level_il

    @property
    def instructions(self):
        return iter(self._instructions)

    def get_basic_block_at(self, addr):
        for bb in self.basic_blocks:
            if bb.start <= addr < bb.end or bb.start == addr:
                return bb
        return self.basic_blocks[0] if self.basic_blocks else None

    def get_regs_read_by(self, addr, arch):
        return []

    def get_regs_written_by(self, addr, arch):
        return []

    def __str__(self):
        return f"uint64_t {self.name}()"


class MockBinaryView:
    """Mock for a Binary Ninja binary view."""
    def __init__(
        self,
        functions=None,
        strings=None,
        arch=None,
    ):
        self.functions = functions or []
        self.strings = strings or []
        self.arch = arch

    def get_segment_at(self, addr):
        return None

    def get_section_at(self, addr):
        return None

    def get_symbol_at(self, addr):
        return None

    def get_functions_at(self, addr):
        return []

    def get_string_at(self, addr):
        return None

    def get_data_var_at(self, addr):
        return None


class MockSymbol:
    """Mock for a Binary Ninja symbol."""
    def __init__(self, symbol_type=None, name="unknown"):
        self.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        self.name = name
        self.full_name = name


class MockILInstruction:
    """Mock for an IL instruction (LLIL/HLIL)."""
    def __init__(self, operation, operands=None, address=0):
        self.operation = operation
        self.operands = operands or []
        self.address = address


class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, string_type=None):
        self.value = value
        self.raw = raw if raw is not None else value.encode("utf-8") if isinstance(value, str) else value
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = string_type or MockStringType("Utf8String")


class MockStringType:
    """Mock for string type."""
    def __init__(self, name="Utf8String"):
        self.name = name