Weihao Li

36 papers Journal 31Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Weihao Li, Mengji Shi, Lei Shi, Boxian Lin
2026 J jnl
IEEE Trans. Veh. Technol.
Chenglin Han, Weihao Li, Mengji Shi, Meng Li, Boxian Lin, Kaiyu Qin
2026 J jnl
J. Frankl. Inst.
Chenglin Han, Weihao Li, Boxian Lin, Xian Qing, Mengji Shi, Kaiyu Qin
2026 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Chenglin Han, Kaiyu Qin, Weihao Li, Boxian Lin, Mengji Shi
2026 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Boxian Lin, Weihao Li, Long You, Jiangfeng Yue, Mengji Shi, Kaiyu Qin
2026 J jnl
Inf. Sci.
Chenglin Han, Mengji Shi, Weihao Li, Meng Li, Boxian Lin, Kaiyu Qin
2026 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Weihao Li, Mengji Shi, Lei Shi, Boxian Lin, Kaiyu Qin
2025 J jnl
Appl. Intell.
Weihao Li, Shiyu Zhou, Mengji Shi, Jiangfeng Yue, Boxian Lin, Kaiyu Qin
2025 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Lei Shi, Shuaiming Yan, Weihao Li
2025 J jnl
IEEE Trans. Control. Netw. Syst.
Weihao Li, Lei Shi, Mengji Shi, Boxian Lin, Kaiyu Qin
2025 J jnl
IEEE Trans. Veh. Technol.
Zhaoyang Wang, Weiqing Diao, Weihao Li, Bo Xu
2025 J jnl
IEEE Trans. Cybern.
Weihao Li, Shuaiming Yan, Lei Shi, Jiangfeng Yue, Mengji Shi, Boxian Lin, Kaiyu Qin
2025 J jnl
Neurocomputing
Xian Qing, Weihao Li, Bowen Chen, Boxian Lin, Mengji Shi, Kaiyu Qin
2025 J jnl
Neural Networks
Weihao Li, Jiangfeng Yue, Mengji Shi, Boxian Lin, Kaiyu Qin
2025 J jnl
Neurocomputing
Long You, Kaiyu Qin, Jiangfeng Yue, Weihao Li, Boxian Lin, Mengji Shi
2025 J jnl
IEEE Trans. Consumer Electron.
Weihao Li, Mengji Shi, Chenglin Han, Boxian Lin, Kaiyu Qin
2025 J jnl
Appl. Intell.
Peiyu Zhai, Kaiyu Qin, Jiangfeng Yue, Boxian Lin, Weihao Li, Mengji Shi
2025 J jnl
IEEE Trans. Consumer Electron.
Weihao Li, Ruichi Ren, Mengji Shi, Boxian Lin, Kaiyu Qin
2025 J jnl
IEEE Trans. Artif. Intell.
Weihao Li, Lei Shi, Mengji Shi, Jiangfeng Yue, Boxian Lin, Kaiyu Qin
2025 J jnl
Appl. Intell.
Chenglin Han, Mengji Shi, Meng Li, Boxian Lin, Weihao Li, Kaiyu Qin
2024 J jnl
IEEE Trans. Netw. Sci. Eng.
Weihao Li, Lei Shi, Mengji Shi, Jiangfeng Yue, Boxian Lin, Kaiyu Qin
2024 J jnl
IEEE Trans. Netw. Sci. Eng.
Lei Shi, Weihao Li, Mengji Shi, Boxian Lin
2024 conf
CDC
Jiangfeng Yue, Kaiyu Qin, Jinliang Shao, Mengji Shi, Weihao Li, Wei Xing Zheng
2024 conf
ASCC
Jiangfeng Yue, Boxian Lin, Mengji Shi, Shiji Tong, Weihao Li, Kaiyu Qin, Jingbo Wang
2024 J jnl
J. Frankl. Inst.
Zhaoyang Wang, Bo Xu, Weihao Li, Zhiguang Feng
2024 J jnl
Appl. Math. Comput.
Chenglin Han, Kaiyu Qin, Mengji Shi, Yan Liu, Weihao Li, Boxian Lin
2023 conf
CDC
Weihao Li, Kaiyu Qin, Jinliang Shao, Lei Shi, Mengji Shi, Wei Xing Zheng
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Mengji Shi, Lei Shi, Weihao Li, Boxian Lin
2023 J jnl
IEEE Trans. Netw. Sci. Eng.
Weihao Li, Mengji Shi, Lei Shi, Boxian Lin, Kaiyu Qin
2023 J jnl
IEEE CAA J. Autom. Sinica
Weihao Li, Kaiyu Qin, Mengji Shi, Jingliang Shao, Boxian Lin
2023 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Weihao Li, Lei Shi, Mengji Shi, Jiangfeng Yue, Boxian Lin, Kaiyu Qin
2023 J jnl
IEEE Trans. Autom. Control.
Lei Shi, Weihao Li, Mengji Shi, Kaibo Shi, Yuhua Cheng
2023 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Weihao Li, Lei Shi, Mengji Shi, Boxian Lin, Kaiyu Qin
2022 conf
CRC
Weihao Li, Mengji Shi, Jiangfeng Yue, Boxian Lin, Kaiyu Qin, Xinyu Zhang
2022 conf
CRC
Shuguang Xin, Mengji Shi, Weihao Li, Jiangfeng Yue, Boxian Lin, Kaiyu Qin
2021 J jnl
Neurocomputing
Weihao Li, Kaiyu Qin, Bowen Chen, Boxian Lin, Mengji Shi
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []