Weicheng Huang

42 papers A* 1B 3C 1Misc 4Journal 18Unranked 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Bohan Zhang, Bo Wang, Huajiang Ouyang, Zhigang Wu, Haohao Bi, Jiawei Xu, Mingchao Liu, Weicheng Huang
2025 J jnl
CoRR
Jiahao Li, Dezhong Tong, Zhuonan Hao, Yinbo Zhu, Hengan Wu, Mingchao Liu, Weicheng Huang
2025 J jnl
Adv. Intell. Syst.
Jiahao Li, Dezhong Tong, Zhuonan Hao, Yinbo Zhu, Hengan Wu, Mingchao Liu, Weicheng Huang
2025 J jnl
IEEE Robotics Autom. Lett.
Dezhong Tong, Zhuonan Hao, Mingchao Liu, Weicheng Huang
2025 J jnl
CoRR
Jiahao Li, Mingchao Liu, Haiyi Liang, Hengan Wu, Weicheng Huang
2025 J jnl
CoRR
Dezhong Tong, Zhuonan Hao, Jiyu Li, Boxi Sun, Mingchao Liu, Liu Wang, Weicheng Huang
2024 J jnl
CoRR
Dezhong Tong, Zhuonan Hao, Weicheng Huang
2024 J jnl
CoRR
Dezhong Tong, Zhuonan Hao, Mingchao Liu, Weicheng Huang
2024 conf
AIM
Yue Feng, Weicheng Huang, I-Ming Chen
2024 J jnl
Int. J. Robotics Res.
Dezhong Tong, Andrew Choi, Longhui Qin, Weicheng Huang, Jungseock Joo, Mohammad Khalid Jawed
2024 J jnl
CoRR
Zhaowei Liu, Mingchao Liu, K. Jimmy Hsia, Xiaonan Huang, Weicheng Huang
2023 conf
ICCCM
Weijie Li, Weicheng Huang, Yinhua Li, Li Wang
2023 conf
RobCE
Haolei Ru, Kuo Su, Jiangjian Xiao, Gen Xu, Kangkang Song, Gang Xu, Jianfei Ge, Weicheng Huang, Meiping Sheng
2023 J jnl
CoRR
Dezhong Tong, Andrew Choi, Longhui Qin, Weicheng Huang, Jungseock Joo, Mohammad Khalid Jawed
2022 J jnl
CoRR
Zhaowei Liu, Andrew McBride, Abhishek Ghosh, Luca Heltai, Weicheng Huang, Tiantang Yu, Paul Steinmann, Prashant Saxena
2022 J jnl
Adv. Intell. Syst.
Xiaonan Huang, Zach J. Patterson, Andrew P. Sabelhaus, Weicheng Huang, Kiyn Chin, Zhijian Ren, Mohammad Khalid Jawed, Carmel Majidi
2022 J jnl
CoRR
Weicheng Huang, Dongze He, Yanbin Li, Dahai Zhang, Huaiwu Zou, Hanwu Liu, Wenmiao Yang, Longhui Qin, Qingguo Fei
2021
Weicheng Huang
2021 A* conf
ICRA
Xiaonan Huang, Weicheng Huang, Zachary Patterson, Zhijian Ren, Mohammad Khalid Jawed, Carmel Majidi
2018 J jnl
CoRR
Mojtaba Forghani, Weicheng Huang, Mohammad Khalid Jawed
2016 conf
CNS
SeongHan Shin, Kazukuni Kobara, Chia-Chuan Chuang, Weicheng Huang
2015 J jnl
CoRR
Hsi-En Yu, Weicheng Huang
2015 J jnl
IEEE Trans. Image Process.
Weicheng Huang, Xun Cao, Ke Lu, Qionghai Dai, Alan Conrad Bovik
2014 conf
ICONIP (3)
Weicheng Huang, Yuki Ishiguma, Shuichi Kurogi
2014 C conf
CloudCom
Hui-Shan Chen, Yi-Lun Pan, Chang-Hsing Wu, Weicheng Huang
2013 conf
ICONIP (1)
Weicheng Huang, Shuichi Kurogi, Takeshi Nishida
2013 conf
WS-FM
Weicheng Huang
2013 conf
IVMSP
Weicheng Huang, Xun Cao, Ke Lu, Qionghai Dai, Alan C. Bovik
2013 conf
Euro-Par Workshops
Juan José Durillo, Radu Prodan, Weicheng Huang
2012 Misc conf
High Performance Computing Workshop (1)
Yoshio Tanaka, Naotaka Yamamoto, Ryousei Takano, Akihiko Ota, Philip M. Papadopoulos, Nadya Williams, Cindy Zheng, Weicheng Huang, Yi-Lun Pan, Chang-Hsing Wu, Hsi-En Yu, J. H. Steven Shiao, Kohei Ichikawa, Taiki Tada, Susumu Date, Shinji Shimojo
2012 B conf
CCGRID
Yi-Lun Pan, Chang-Hsing Wu, Hsi-En Yu, Hui-Shan Chen, Weicheng Huang
2012 Misc conf
ICNC
Hui-Shan Chen, Yi-Lun Pan, Chang-Hsing Wu, Hsi-En Yu, Kuo-Yang Cheng, Weicheng Huang
2012 conf
ICONIP (5)
Weicheng Huang, Shuichi Kurogi, Takeshi Nishida
2011 Misc conf
UCC
Yi-Lun Pan, Chang-Hsing Wu, Hsi-En Yu, Hui-Shan Chen, Weicheng Huang
2011 conf
ICONIP (3)
Shuichi Kurogi, Hiroshi Yuno, Takeshi Nishida, Weicheng Huang
2010 conf
GCA
Yi-Lun Pan, Chia-Yen Liu, Chang-Hsing Wu, Hsi-En Yu, Kuo-Yang Cheng, Weicheng Huang
2010 Misc conf
PDPTA
Chang-Hsing Wu, Yi-Lun Pan, Hui-Shan Chen, Weicheng Huang
2010 B conf
CCGRID
Yi-Lun Pan, Chang-Hsing Wu, Chia-Yen Liu, Hsi-En Yu, Weicheng Huang
2009 conf
GCA
Yi-Lun Pan, Chang-Hsing Wu, Weicheng Huang
2008 conf
GCA
Yi-Lun Pan, Chang-Hsing Wu, Weicheng Huang
2006 B conf
CCGRID
Weicheng Huang, Chien-Lin Huang, Chien-Heng Wu
2004 J jnl
Int. J. High Perform. Comput. Appl.
Weicheng Huang, Danesh K. Tafti
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