Weilong Wang

54 papers A* 1A 1C 1Misc 1Journal 49Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Sijie Wang, Weilong Wang, Jingwei Li
2026 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Bo Zhao, Zhihang Li, Xiaohan Yu, Benzheng Yuan, Chaojie Zhang, Yimin Gao, Weilong Wang, Qing Mu, Shuya Wang, Huihui Sun, Tian Yang, Mengfan Zhang, Chuanbing Han, Peng Xu, Wenqing Wang
2026 J jnl
Environ. Model. Softw.
Zhaocai Wang, Cheng Ding, Nannan Xu, Weilong Wang, Xingxing Zhang
2026 J jnl
Quantum Inf. Process.
Chaojie Zhang, Weilong Wang, Jiaxin Li, Benzheng Yuan, Xiaohan Yu, Zhiguo Zha, Qing Mu, Zheng Shan
2026 J jnl
J. Comput. Appl. Math.
Qianqian Ding, Weilong Wang
2025 J jnl
J. Sci. Comput.
Weilong Wang, Jilian Wu, Ning Li
2025 J jnl
IEEE Trans. Comput. Soc. Syst.
Yingxin Li, Yingjie Wang, Peng Wang, Weilong Wang, Xiangrong Tong
2025 J jnl
Neurocomputing
Jinhui Pang, Cheng Shang, Ziyu Jia, Peng Hao, Weilong Wang, Xiaoshuai Hao
2025 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Yingying Xie, Qi Li, Liquan Mei, Weilong Wang
2025 J jnl
IEEE Netw.
Borui Li, Tianen Liu, Weilong Wang, Chengqing Zhao, Shuai Wang
2025 J jnl
Inf. Fusion
Peng Hao, Weilong Wang, Xiaobing Wang, Yingying Jiang, Hanchao Jia, Shaowei Cui, Junhang Wei, Xiaoshuai Hao
2025 J jnl
CoRR
Yuhan Hao, Zhengning Li, Lei Sun, Weilong Wang, Naixin Yi, Sheng Song, Caihong Qin, Mofan Zhou, Yifei Zhan, Peng Jia, Xianpeng Lang
2025 J jnl
CoRR
Bo Zhao, Zhihang Li, Xiaohan Yu, Benzheng Yuan, Chaojie Zhang, Yimin Gao, Weilong Wang, Qing Mu, Shuya Wang, Huihui Sun, Tian Yang, Mengfan Zhang, Chuanbing Han, Peng Xu, Wenqing Wang, Zheng Shan
2025 J jnl
IEEE Trans. Mob. Comput.
Borui Li, Tiange Xia, Weilong Wang, Jingyuan Zhang, Shuai Wang, Chenhong Cao, Zheng Dong, Shuai Wang
2025 J jnl
ACM Trans. Internet Things
Weilong Wang, Borui Li, Shuai Wang, Tian He
2025 J jnl
Comput. Mater. Continua
Mengdi Yang, Feng Yue, Weilong Wang, Xiangdong Meng, Lixin Wang, Pengyu Han, Haoran He, Benzheng Yuan, Zhiqiang Fan, Chenhui Wang, Qiming Du, Danyang Zheng, Xuefei Feng, Zheng Shan
2025 J jnl
Neurocomputing
Yingjie Wang, Yingxin Li, Weilong Wang, Peiyong Duan, Akshita Maradapu Vera Venkata Sai, Zhipeng Cai
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Qian Wang, Weilong Wang, Yan Wang, Jiadong Ren, Bing Zhang
2025 J jnl
Mach. Learn. Sci. Technol.
Xiaodong Ding, Fudong Liu, Weilong Wang, Yu Zhu, Yifan Hou, Yizhen Huang, Jinchen Xu, Zheng Shan
2025 A* conf
CHI
Zhuoran Lu, Patrick Li, Weilong Wang, Ming Yin
2025 J jnl
Comput. Networks
Jiawei Liu, Bing Dong, Weilong Wang, Muhan Yuan, Borui Li, Zhao-Dong Xu, Shuai Wang
2024 J jnl
CoRR
Zhangyu Wang, Lantian Xu, Zhifeng Kong, Weilong Wang, Xuyu Peng, Enyang Zheng
2024 J jnl
J. Sci. Comput.
Weilong Wang, Guoliang Zhang
2024 J jnl
IEEE Internet Things J.
Chenghao Zhang, Yingjie Wang, Weilong Wang, Haijing Zhang, Zhaowei Liu, Xiangrong Tong, Zhipeng Cai
2024 J jnl
Quantum Inf. Process.
Tian Yang, Weilong Wang, Bo Zhao, Lixin Wang, Xiaodong Ding, Chen Liang, Zheng Shan
2024 J jnl
IEEE Internet Things J.
Xuelei Sun, Yingjie Wang, Peiyong Duan, Qasim Zia, Weilong Wang, Zhipeng Cai
2024 J jnl
CoRR
Shengfang Zhai, Weilong Wang, Jiajun Li, Yinpeng Dong, Hang Su, Qingni Shen
2024 J jnl
IEEE Trans. Mob. Comput.
Zhongwei Zhan, Yingjie Wang, Peiyong Duan, Akshita Maradapu Vera Venkata Sai, Zhaowei Liu, Chaocan Xiang, Xiangrong Tong, Weilong Wang, Zhipeng Cai
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Hua Chen, Jiaxiong Fang, Weilong Wang, Wei Liu, Ye Tian, Qing Wang, Gang Wang
2024 A conf
ICWS
Yingxin Li, Weilong Wang, Yingjie Wang, Tong Xiangrong, Peiyong Duan, Zhipeng Cai
2023 J jnl
IEEE Trans. Mob. Comput.
Weilong Wang, Yingjie Wang, Peiyong Duan, Tianen Liu, Xiangrong Tong, Zhipeng Cai
2023 J jnl
IEEE Trans. Veh. Technol.
Hua Chen, Weilong Wang, Wei Liu, Ye Tian, Gang Wang
2023 J jnl
IEEE Trans. Instrum. Meas.
Ke Liu, Xiaotao Guo, Tianxin Liu, Weilong Wang
2023 J jnl
CoRR
Zhongwei Zhan, Yingjie Wang, Peiyong Duan, Akshita Maradapu Vera Venkata Sai, Zhaowei Liu, Chaocan Xiang, Xiangrong Tong, Weilong Wang, Zhipeng Cai
2023 Misc conf
ICASSP
Shengfang Zhai, Qingni Shen, Xiaoyi Chen, Weilong Wang, Cong Li, Yuejian Fang, Zhonghai Wu
2023 J jnl
CoRR
Shengfang Zhai, Qingni Shen, Xiaoyi Chen, Weilong Wang, Cong Li, Yuejian Fang, Zhonghai Wu
2023 J jnl
Appl. Math. Comput.
Weilong Wang
2023 J jnl
Circuits Syst. Signal Process.
Weilong Wang, Tianyi Zhao, Hao Dong, Minghong Zhu, Zheng Zhou, Hua Chen, Weiyue Liu
2023 J jnl
Signal Process.
Weilong Wang, Hua Chen, Wei Liu, Qing Wang, Gang Wang
2022 J jnl
Entropy
Benzheng Yuan, Weilong Wang, Fudong Liu, Haoran He, Zheng Shan
2022 J jnl
Eur. J. Oper. Res.
Alexandre Jacquillat, Vikrant Vaze, Weilong Wang
2022 J jnl
Comput. Networks
Weilong Wang, Yingjie Wang, Yan Huang, Chunxiao Mu, Zice Sun, Xiangrong Tong, Zhipeng Cai
2022 J jnl
SIAM J. Numer. Anal.
Xiaoli Li, Weilong Wang, Jie Shen
2022 J jnl
Entropy
Haoran He, Weilong Wang, Fudong Liu, Benzheng Yuan, Zheng Shan
2022 J jnl
Proc. ACM Hum. Comput. Interact.
Zhuoran Lu, Patrick Li, Weilong Wang, Ming Yin
2022 C conf
ICIS
Yixuan Liu, Weilong Wang, Baolong Liu, Andrew B. Whinston
2021 J jnl
CoRR
Xiaoli Li, Weilong Wang, Jie Shen
2020 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Jiajian Wang, Hu Liu, Zhiqun Pan, Weilong Wang, Lulu Zhang, Zilong Liu
2020 J jnl
Wirel. Networks
Weilong Wang, Jun Wei, Shanghong Zhao, Yongjun Li, Yongxing Zheng
2020 J jnl
Quantum Inf. Process.
Weilong Wang, Xiangdong Meng, Yangyang Fei, Zhi Ma
2020 J jnl
J. Comput. Phys.
Fenghua Tong, Weilong Wang, Xinlong Feng, Jianping Zhao, Zhilin Li
2020 J jnl
Int. J. Satell. Commun. Netw.
Cong Peng, Shanghong Zhao, Jun Li, Yongjun Li, Weilong Wang, Hanghang Gao
2020 J jnl
Int. J. Satell. Commun. Netw.
Cong Peng, Shanghong Zhao, Ruixin Li, Jun Li, Weilong Wang, Hanghang Gao
2019 J jnl
IEEE Access
Weilong Wang, Shanghong Zhao, Yongxing Zheng, Yongjun Li
tests/unit/test_decompile_medium_level.py
← Index tests/unit/test_decompile_medium_level.py python
# tests/unit/test_decompile_medium_level.py
"""Unit tests (mocked BN) for bninja/analysis/medium_level.py
   and bninja/analysis/medium_level_normalization.py."""
# tests/unit/test_decompile_medium_level.py
import sys
from unittest.mock import MagicMock, patch

# Installa gli stubs BN
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

# ── Definisci MockMLILInstruction PRIMA di importare il modulo ──
class MockMLILInstruction:
    def __init__(self, operation, address=0, operands=None):
        self.operation = operation
        self.address = address
        self.operands = operands or []

# ── Patcha il modulo BN in modo che isinstance() funzioni ──
sys.modules["binaryninja"].MediumLevelILInstruction = MockMLILInstruction
sys.modules["binaryninja"].SSAVariable = type("SSAVariable", (), {})
sys.modules["binaryninja"].Variable = type("Variable", (), {})
sys.modules["binaryninja"].ILIntrinsic = type("ILIntrinsic", (), {})

# Ora importa il modulo — vede già i tipi corretti
from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import (
    MediumLevelNormalization,
)	

class MockMLILFunction:
    def __init__(self, instructions):
        self._instructions = instructions

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

    @property
    def basic_blocks(self):
        # one block containing all instructions, good enough for MinHasher
        block = MagicMock()
        block.__iter__ = lambda self_: iter([])  # not used by MediumLevelAnalysis
        return [block]


class MockFunction:
    def __init__(self, name="func", start=0x1000, mlil=None):
        self.name = name
        self.start = start
        self.mlil = mlil



class TestMediumLevelNormalization:
    def setup_method(self):
        from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import (
            MediumLevelNormalization,
        )
        self.norm = MediumLevelNormalization()

    def test_normalize_skeleton_single_instruction(self):
        il = MockMLILInstruction(operation=42, operands=[])
        result = self.norm.normalize_instruction_all_levels(il)
        assert result == [42]

    def test_normalize_skeleton_nested(self):
        inner = MockMLILInstruction(operation=7, operands=[])
        outer = MockMLILInstruction(operation=1, operands=[inner])
        result = self.norm.normalize_instruction_all_levels(outer)
        assert result == [1, 7]

    def test_normalize_skeleton_with_list_operand(self):
        inner_a = MockMLILInstruction(operation=10, operands=[])
        inner_b = MockMLILInstruction(operation=11, operands=[])
        outer = MockMLILInstruction(operation=2, operands=[[inner_a, inner_b]])
        result = self.norm.normalize_instruction_all_levels(outer)
        assert result == [2, 10, 11]

    def test_normalize_skeleton_none(self):
        result = self.norm.normalize_instruction_all_levels(None)
        # collect on None should leave ops empty
        assert result == []

    def test_normalize_typed_appends_leaf_types(self):
        # operand is a plain int -> "CONST"
        il = MockMLILInstruction(operation=3, operands=[42])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [3, "CONST"]

    def test_normalize_typed_bool_before_int(self):
        # bool must be detected before int (since bool is an int subclass)
        il = MockMLILInstruction(operation=4, operands=[True])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [4, "BOOL"]

    def test_normalize_typed_float(self):
        il = MockMLILInstruction(operation=5, operands=[1.5])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [5, "FLOAT_CONST"]

    def test_normalize_typed_str(self):
        il = MockMLILInstruction(operation=6, operands=["hello"])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [6, "STR"]

    def test_normalize_typed_unknown_falls_back_to_typename(self):
        class Weird:
            pass
        il = MockMLILInstruction(operation=8, operands=[Weird()])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [8, "WEIRD"]

    def test_normalize_typed_nested_mlil(self):
        inner = MockMLILInstruction(operation=99, operands=[7])
        outer = MockMLILInstruction(operation=1, operands=[inner])
        result = self.norm.normalize_instr_with_operands(outer)
        assert result == [1, 99, "CONST"]

    def test_normalize_typed_list_mixed(self):
        inner = MockMLILInstruction(operation=50, operands=[])
        il = MockMLILInstruction(operation=2, operands=[[inner, 99]])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [2, 50, "CONST"]


class TestMediumLevelAnalysis:
    def _make_analysis(self, instructions=None, mlil=True, start=0x1000):
        from redb.extractors.decompiler.bninja.analysis.medium_level import (
            MediumLevelAnalysis,
        )
        mlil_func = MockMLILFunction(instructions or []) if mlil else None
        func = MockFunction(name="testfunc", start=start, mlil=mlil_func)
        bv = MagicMock()
        return MediumLevelAnalysis(func, bv, MagicMock())

    def test_collect_returns_empty_when_no_mlil(self):
        a = self._make_analysis(mlil=False)
        sk, sk_addr, ty, ty_addr = a._collect_mlil_skeleton_and_typed()
        assert sk == [] and sk_addr == [] and ty == [] and ty_addr == []

    def test_collect_skeleton_and_typed_basic(self):
        instrs = [
            MockMLILInstruction(operation=1, address=0x1000, operands=[]),
            MockMLILInstruction(operation=2, address=0x1004, operands=[42]),
        ]
        a = self._make_analysis(instructions=instrs, start=0x1000)
        sk, sk_addr, ty, ty_addr = a._collect_mlil_skeleton_and_typed()

        assert sk == [[1], [2]]
        assert ty == [[1], [2, "CONST"]]
        assert sk_addr == [(0, [1]), (4, [2])]
        assert ty_addr == [(0, [1]), (4, [2, "CONST"])]

    def test_collect_negative_offset_clamped_to_zero(self):
        instrs = [
            MockMLILInstruction(operation=1, address=0x900, operands=[]),
        ]
        a = self._make_analysis(instructions=instrs, start=0x1000)
        _, sk_addr, _, ty_addr = a._collect_mlil_skeleton_and_typed()
        assert sk_addr[0][0] == 0
        assert ty_addr[0][0] == 0

    def test_log_error_records_entry(self):
        a = self._make_analysis()
        a.log_error("boom", "fname", 0x1234, ValueError("x"), "loc")
        assert len(a.errors) == 1
        err = a.errors[0]
        assert err["function_name"] == "fname"
        assert err["function_address"] == "4660"  # hex 0x1234
        assert err["error_location"] == "loc"
        assert err["error_message"] == "boom"
        assert err["error_type"] == "ValueError"
        assert "timestamp" in err

    @patch(
        "redb.extractors.decompiler.bninja.analysis.medium_level.MinHasher"
    )
    def test_analyze_returns_expected_keys(self, mock_minhasher):
        mock_minhasher.return_value.calculateMinHash.return_value = [1, 2, 3]

        instrs = [
            MockMLILInstruction(operation=1, address=0x1000, operands=[]),
            MockMLILInstruction(operation=2, address=0x1004, operands=[42]),
            MockMLILInstruction(operation=3, address=0x1008, operands=[]),
        ]
        a = self._make_analysis(instructions=instrs, start=0x1000)
        result, errors = a.analyze()

        expected_keys = {
            "function_address",
            "body_mlil_skeleton_vector",
            "sha256_mlil_skeleton",
            "tlsh_mlil_skeleton",
            "minhash_mlil_skeleton",
            "body_mlil_typed_vector",
            "sha256_mlil_typed",
            "tlsh_mlil_typed",
            "minhash_mlil_typed",
        }
        assert set(result.keys()) == expected_keys
        assert result["function_address"] == 0x1000
        assert result["minhash_mlil_skeleton"] == [1, 2, 3]
        assert result["minhash_mlil_typed"] == [1, 2, 3]
        assert errors == []

    @patch(
        "redb.extractors.decompiler.bninja.analysis.medium_level.MinHasher"
    )
    def test_analyze_empty_mlil(self, mock_minhasher):
        mock_minhasher.return_value.calculateMinHash.return_value = []
        a = self._make_analysis(mlil=False)
        result, errors = a.analyze()
        assert result["body_mlil_skeleton_vector"] == []
        assert result["body_mlil_typed_vector"] == []
        assert errors == []

    @patch(
        "redb.extractors.decompiler.bninja.analysis.medium_level.MinHasher"
    )
    def test_analyze_sha256_differs_skeleton_vs_typed(self, mock_minhasher):
        mock_minhasher.return_value.calculateMinHash.return_value = []

        instrs = [
            MockMLILInstruction(operation=1, address=0x1000, operands=[42]),
            MockMLILInstruction(operation=2, address=0x1004, operands=["foo"]),
            MockMLILInstruction(operation=3, address=0x1008, operands=[True]),
        ]
        a = self._make_analysis(instructions=instrs)
        result, _ = a.analyze()
        # skeleton ignores operand leaves, typed includes them -> different hashes
        assert result["sha256_mlil_skeleton"] != result["sha256_mlil_typed"]


class TestMinHasherMLILKinds:
    def _make_func(self, instrs):
        # MinHasher iterates basic_blocks then over each block
        block = MagicMock()
        block.__iter__ = lambda self_: iter(instrs)
        f = MagicMock()
        f.basic_blocks = [block]
        return f

    def test_mlil_skeleton_uses_medium_normalizer(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import (
            MinHasher, TokenKind,
        )
        instrs = [
            MockMLILInstruction(operation=i, operands=[]) for i in range(5)
        ]
        func = self._make_func(instrs)
        hasher = MinHasher(seed=42, il_function=func, kind=TokenKind.MLIL)
        result = hasher.calculateMinHash()
        # 5 instructions -> 3 trigrams -> non-empty signature
        assert result != []

    def test_typed_mlil_differs_from_skeleton(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import (
            MinHasher, TokenKind,
        )
        instrs = [
            MockMLILInstruction(operation=1, operands=[42]),
            MockMLILInstruction(operation=2, operands=["s"]),
            MockMLILInstruction(operation=3, operands=[True]),
            MockMLILInstruction(operation=4, operands=[1.5]),
        ]
        func = self._make_func(instrs)
        skel = MinHasher(seed=42, il_function=func, kind=TokenKind.MLIL).calculateMinHash()
        typed = MinHasher(seed=42, il_function=func, kind=TokenKind.TYPED_MLIL).calculateMinHash()
        # Same seed, same instructions, but typed has extra leaf tokens
        # -> hashes should generally differ
        assert skel != typed

    def test_mlil_too_few_instructions(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import (
            MinHasher, TokenKind,
        )
        instrs = [MockMLILInstruction(operation=1, operands=[])] * 2
        func = self._make_func(instrs)
        hasher = MinHasher(seed=42, il_function=func, kind=TokenKind.MLIL)
        assert hasher.calculateMinHash() == []

    def test_unsupported_kind_raises(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
        func = self._make_func([])
        hasher = MinHasher(seed=42, il_function=func, kind="bogus")
        with pytest.raises(ValueError):
            hasher.calculateMinHash()