Xianghu Yue

37 papers A* 5A 4C 1Misc 2Journal 23Unranked 2
YearRankTypeTitle / Venue / Authors
2026 A* conf
AAAI
Daipeng Zhang, Wenhuan Lu, Xianghu Yue, Hongcheng Zhang, Jianguo Wei
2026 J jnl
IEEE Signal Process. Lett.
Wenhao Yang, Jianguo Wei, Wenhuan Lu, Xinyue Song, Xianghu Yue
2026 J jnl
Pattern Recognit.
Xianghu Yue, Yiming Chen, Xueyi Zhang, Xiaoxue Gao, Mengling Feng, Mingrui Lao, Huiping Zhuang, Haizhou Li
2026 J jnl
Trans. Assoc. Comput. Linguistics
Yiming Chen, Xianghu Yue, Chen Zhang, Xiaoxue Gao, Robby T. Tan, Haizhou Li
2026 J jnl
CoRR
Sen Zhang, Jianguo Wei, Wenhuan Lu, Xianghu Yue, Wei Li, Qiang Li, Pengcheng Zhao, Ming Cai, Luo Si
2025 J jnl
IEEE Signal Process. Lett.
Xinyuan Qian, Xianghu Yue, Jiadong Wang, Huiping Zhuang, Haizhou Li
2025 J jnl
CoRR
Meng Cui, Xianghu Yue, Xinyuan Qian, Jinzheng Zhao, Haohe Liu, Xubo Liu, Daoliang Li, Wenwu Wang
2025 A* conf
ACM Multimedia
Xueyi Zhang, Jialu Sun, Chengwei Zhang, Xianghu Yue, Tianfang Xiao, Siqi Cai, Mingrui Lao, Haizhou Li
2025 J jnl
CoRR
Xianghu Yue, Yiming Chen, Xueyi Zhang, Xiaoxue Gao, Mengling Feng, Mingrui Lao, Huiping Zhuang, Haizhou Li
2025 conf
ACL (1)
Yidi Jiang, Qian Chen, Shengpeng Ji, Yu Xi, Wen Wang, Chong Zhang, Xianghu Yue, Shiliang Zhang, Haizhou Li
2025 J jnl
CoRR
Yidi Jiang, Qian Chen, Shengpeng Ji, Yu Xi, Wen Wang, Chong Zhang, Xianghu Yue, Shiliang Zhang, Haizhou Li
2024 J jnl
CoRR
Xinyuan Qian, Xianghu Yue, Jiadong Wang, Huiping Zhuang, Haizhou Li
2024 conf
EMNLP (Findings)
Yiming Chen, Xianghu Yue, Xiaoxue Gao, Chen Zhang, Luis Fernando D'Haro, Robby T. Tan, Haizhou Li
2024 J jnl
CoRR
Yiming Chen, Xianghu Yue, Xiaoxue Gao, Chen Zhang, Luis Fernando D'Haro, Robby T. Tan, Haizhou Li
2024 J jnl
CoRR
Xianghu Yue, Xiaohai Tian, Malu Zhang, Zhizheng Wu, Haizhou Li
2024 A* conf
NeurIPS
Xueyi Zhang, Mingrui Lao, Peng Zhao, Jun Tang, Yanming Guo, Siqi Cai, Xianghu Yue, Haizhou Li
2024 A* conf
ACM Multimedia
Xianghu Yue, Xueyi Zhang, Yiming Chen, Chengwei Zhang, Mingrui Lao, Huiping Zhuang, Xinyuan Qian, Haizhou Li
2024 A* conf
ACM Multimedia
Chengwei Zhang, Xueyi Zhang, Xianghu Yue, Mingrui Lao, Tao Jiang, Jiawei Wang, Fubo Zhang, Longyong Chen
2024 J jnl
IEEE Signal Process. Lett.
Duo Ma, Xianghu Yue, Junyi Ao, Xiaoxue Gao, Haizhou Li
2024 J jnl
CoRR
Yiming Chen, Xianghu Yue, Chen Zhang, Xiaoxue Gao, Robby T. Tan, Haizhou Li
2023 A conf
INTERSPEECH
Jingru Lin, Xianghu Yue, Junyi Ao, Haizhou Li
2023 Misc conf
ICASSP
Xiaoxue Gao, Xianghu Yue, Haizhou Li
2023 Misc conf
ICASSP
Xianghu Yue, Junyi Ao, Xiaoxue Gao, Haizhou Li
2022 J jnl
IEEE J. Sel. Top. Signal Process.
Xianghu Yue, Jingru Lin, Fabian Ritter Gutierrez, Haizhou Li
2022 J jnl
CoRR
Xiaoxue Gao, Xianghu Yue, Haizhou Li
2022 J jnl
CoRR
Xianghu Yue, Junyi Ao, Xiaoxue Gao, Haizhou Li
2021 A conf
Interspeech
Xianghu Yue, Haizhou Li
2020 J jnl
Neurocomputing
Xin Gao, Fang Deng, Xianghu Yue
2019 C conf
ASRU
Xianghu Yue, Grandee Lee, Emre Yilmaz, Fang Deng, Haizhou Li
2019 J jnl
CoRR
Xianghu Yue, Grandee Lee, Emre Yilmaz, Fang Deng, Haizhou Li
2019 A conf
INTERSPEECH
Grandee Lee, Xianghu Yue, Haizhou Li
2019 A conf
INTERSPEECH
Emre Yilmaz, Samuel Cohen, Xianghu Yue, David A. van Leeuwen, Haizhou Li
2019 J jnl
CoRR
Emre Yilmaz, Samuel Cohen, Xianghu Yue, David A. van Leeuwen, Haizhou Li
2019 J jnl
Sci. China Inf. Sci.
Xianghu Yue, Fang Deng, Yue Xu
2019 J jnl
IEEE Internet Things J.
Fang Deng, Xianghu Yue, Xinyu Fan, Shengpan Guan, Yue Xu, Jie Chen
2017 J jnl
Sensors
Jiahong Li, Xianghu Yue, Jie Chen, Fang Deng
2017 J jnl
IEEE Trans. Ind. Electron.
Fang Deng, Shengpan Guan, Xianghu Yue, Xiaodan Gu, Jie Chen, Jianyao Lv, Jiahong Li
tests/unit/test_decompile_scores.py
← Index tests/unit/test_decompile_scores.py python
"""Unit tests for bninja/analysis/scores.py — ObfuscationScores."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import (
    install_binja_stubs,
    HighLevelILOperation,
)
bn_mock = install_binja_stubs()

from redb.extractors.decompiler.bninja.analysis.scores import (
    ObfuscationScores,
    get_dominated_by,
    uses_mba,
)
import binaryninja.highlevelil as hlil_mod


# ============================================================================
# Helper: Mock HLIL instruction
# ============================================================================

class MockHLILInstruction(hlil_mod.HighLevelILInstruction):
    """Mock HLIL instruction with operation and operands."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class MockHLILBasicBlock:
    """Mock HLIL basic block for flattened score testing."""
    def __init__(self, incoming_edges=None, dominator_tree_children=None):
        self.incoming_edges = incoming_edges or []
        self.dominator_tree_children = dominator_tree_children or []


# ============================================================================
# 5a. ObfuscationScores
# ============================================================================


class TestFlattenedScore:
    def test_flattened_score_no_back_edges(self):
        """Linear CFG with no back edges -> score 0.0."""
        block = MockHLILBasicBlock(incoming_edges=[], dominator_tree_children=[])
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == 0.0

    def test_flattened_score_with_loop(self):
        """CFG with a back edge -> score > 0.0."""
        block = MockHLILBasicBlock(dominator_tree_children=[])
        # Create a back edge: an incoming edge whose source is in the dominated set
        edge = MagicMock()
        edge.source = block  # source IS the dominator -> back edge
        block.incoming_edges = [edge]
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() > 0.0

    def test_flattened_score_fully_flat(self):
        """Flattened CFG: one block dominates all -> ratio close to 1.0."""
        children = [MockHLILBasicBlock() for _ in range(4)]
        root = MockHLILBasicBlock(dominator_tree_children=children)
        # Back edge from root incoming
        edge = MagicMock()
        edge.source = root
        root.incoming_edges = [edge]
        all_blocks = [root] + children
        func = MagicMock()
        func.basic_blocks = all_blocks
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == pytest.approx(1.0)


class TestMBAScore:
    def test_mba_score_no_mixed_ops(self):
        """Instructions with only arithmetic -> score 0.0."""
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        func = MagicMock()
        func.instructions = [instr]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 0.0

    def test_mba_score_mixed_ops(self):
        """Instructions with arithmetic + logic -> score > 0.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_ADD, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() > 0.0

    def test_mba_score_all_mixed(self):
        """Every instruction has both -> score 1.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_NOT, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_SUB, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 1.0


class TestGetDominatedBy:
    def test_get_dominated_by(self):
        child1 = MockHLILBasicBlock(dominator_tree_children=[])
        child2 = MockHLILBasicBlock(dominator_tree_children=[])
        root = MockHLILBasicBlock(dominator_tree_children=[child1, child2])
        result = get_dominated_by(root)
        assert root in result
        assert child1 in result
        assert child2 in result
        assert len(result) == 3


class TestUsesMBA:
    def test_uses_mba_arithmetic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_logic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_mixed(self):
        inner = MockHLILInstruction(HighLevelILOperation.HLIL_AND, operands=[])
        outer = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[inner])
        assert uses_mba(outer) is True