Weijia Chen

29 papers A* 3Journal 19Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
Geo spatial Inf. Sci.
Yongquan Lu, Guilin Liu, Xiuyuan Zhang, Jingwen Wang, Weijia Chen, Yuecheng Li, Desheng Jiang
2026 J jnl
Int. J. Syst. Sci.
Weijia Chen, Fucai Qian, Yan Guo, Dongyue Qian
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Weijia Chen, Guilin Liu
2024 A* conf
ICRA
Dongqiangzi Ye, Yufei Xie, Weijia Chen, Zixiang Zhou, Lingting Ge, Hassan Foroosh
2024 A* conf
ICRA
Zixiang Zhou, Dongqiangzi Ye, Weijia Chen, Yufei Xie, Yu Wang, Panqu Wang, Hassan Foroosh
2023 J jnl
CoRR
Dongqiangzi Ye, Yufei Xie, Weijia Chen, Zixiang Zhou, Hassan Foroosh
2023 J jnl
CoRR
Zixiang Zhou, Dongqiangzi Ye, Weijia Chen, Yufei Xie, Yu Wang, Panqu Wang, Hassan Foroosh
2023 A* conf
AAAI
Dongqiangzi Ye, Zixiang Zhou, Weijia Chen, Yufei Xie, Yu Wang, Panqu Wang, Hassan Foroosh
2022 J jnl
CoRR
Dongqiangzi Ye, Zixiang Zhou, Weijia Chen, Yufei Xie, Yu Wang, Panqu Wang, Hassan Foroosh
2022 J jnl
CoRR
Dongqiangzi Ye, Weijia Chen, Zixiang Zhou, Yufei Xie, Yu Wang, Panqu Wang, Hassan Foroosh
2022 J jnl
J. Glob. Inf. Manag.
Weijia Chen, Wen Gong, Zhou Jiang, Peizhen Jin
2021 conf
DSC
Xumeng Liu, Tianqi Sun, Zijie Zhao, Du Wu, Qi Hu, Weijia Chen, Li Gu
2021
Weijia Chen
2021 J jnl
Remote. Sens.
Langxu Zhao, Haihong Tao, Weijia Chen, Dawei Song
2021 J jnl
IEEE Robotics Autom. Lett.
Junming Zhang, Weijia Chen, Yuping Wang, Ram Vasudevan, Matthew Johnson-Roberson
2021 J jnl
Remote. Sens.
Qiqi Li, Guilin Liu, Weijia Chen
2020 J jnl
IEEE Access
Langxu Zhao, Haihong Tao, Weijia Chen
2020 J jnl
CoRR
Junming Zhang, Weijia Chen, Yuping Wang, Ram Vasudevan, Matthew Johnson-Roberson
2019 conf
CCKS
Feng-Lin Li, Weijia Chen, Qi Huang, Yikun Guo
2019 J jnl
CoRR
Feng-Lin Li, Weijia Chen, Qi Huang, Yikun Guo
2019 J jnl
Algorithms
Weijia Chen, Yancai Xiao
2019 J jnl
IEEE Access
Kaijun Song, Weijia Chen, Shema Richard Patience, Yuxuan Chen, Abdelqani Mohamed Iman, Yong Fan
2019 conf
ISWC (Satellites)
Feng-Lin Li, Kehan Chen, Yan Wan, Weijia Chen, Qi Huang, Yikun Guo
2018 conf
A-SSCC
Weijia Chen, Hui Wu, Shaojun Wei, Anping He, Hong Chen
2017 J jnl
CoRR
Weijia Chen, Yuedong Xu, Xiaofeng Wu
2017 J jnl
Entropy
Yancai Xiao, Yi Hong, Xiuhai Chen, Weijia Chen
2016 conf
PerCom Workshops
Richard O. Sinnott, Weijia Chen
2014 conf
ISBI
Weijia Chen, Lucian Mihai Itu, Puneet Sharma, Ali Kamen
2013 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Chunxiao Li, Weijia Chen, Dawei He, Xuelong Hu, Shigeru Shimamoto
tests/unit/test_decompile_strings.py
← Index tests/unit/test_decompile_strings.py python
"""Unit tests for bninja/analysis/strings.py — StringAnalysis."""
import pytest
import math
from unittest.mock import MagicMock


# StringAnalysis has no binaryninja imports, just collections and math
from redb.extractors.decompiler.bninja.analysis.strings import StringAnalysis


# ============================================================================
# Helper mocks
# ============================================================================

class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, type_name="Utf8String"):
        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 = MagicMock()
        self.type.name = type_name


class MockBinaryView:
    """Mock binary view with a strings list."""
    def __init__(self, strings=None):
        self.strings = strings or []


# ============================================================================
# 6a. StringAnalysis
# ============================================================================


class TestStringAnalysisEntropy:
    def setup_method(self):
        self.sa = StringAnalysis(bv=MockBinaryView(), functions=[])

    def test_entropy_empty_string(self):
        assert self.sa.entropy("") == 0.0

    def test_entropy_single_char(self):
        assert self.sa.entropy("aaaa") == 0.0

    def test_entropy_uniform_distribution(self):
        # "abcd" -> 4 unique chars, each p=1/4, entropy = log2(4) = 2.0
        result = self.sa.entropy("abcd")
        assert result == pytest.approx(2.0)

    def test_entropy_binary_string(self):
        # "ab" -> 2 unique chars, each p=1/2, entropy = log2(2) = 1.0
        result = self.sa.entropy("ab")
        assert result == pytest.approx(1.0)


class TestStringAnalysisAnalyze:
    def test_analyze_deduplication(self):
        """Duplicate (string, encoding) pairs -> only first kept."""
        entries = [
            MockStringEntry("hello", start=100, type_name="Utf8String"),
            MockStringEntry("hello", start=200, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        assert result[0]["string_offset"] == 100

    def test_analyze_sorted_by_address(self):
        """First occurrence (lowest offset) is the one kept."""
        entries = [
            MockStringEntry("world", start=500, type_name="Utf8String"),
            MockStringEntry("world", start=100, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        # The analyze() sorts by start, so 100 comes first
        assert result[0]["string_offset"] == 100

    def test_analyze_empty_bv(self):
        bv = MockBinaryView(strings=[])
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert result == []

    def test_analyze_output_schema(self):
        entries = [MockStringEntry("test_string", start=0, type_name="Utf8String")]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        r = result[0]
        required_keys = [
            "string",
            "string_raw",
            "string_encoding",
            "string_offset",
            "string_length",
            "string_raw_length",
            "string_entropy",
        ]
        for key in required_keys:
            assert key in r, f"Missing key: {key}"