Xianfeng Ou

34 papers Journal 34
YearRankTypeTitle / Venue / Authors
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Meng Wu, Xianfeng Ou, Youli Lu, Wujing Li, Dan Yu, Zhihao Liu, Chengtao Ji
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xianfeng Ou, Liangzhen Liu, Bing Tu, Linbo Qing, Guoyun Zhang, Zifei Liang
2023 J jnl
IEEE Access
Xianfeng Ou, Hanpu Wang, Xinzhong Liu, Jun Zheng, Zhihao Liu, Shulun Tan, Hongzhi Zhou
2023 J jnl
IEEE Trans. Image Process.
Xianfeng Ou, Meng Wu, Bing Tu, Guoyun Zhang, Wujing Li
2023 J jnl
Appl. Intell.
Xianfeng Ou, Hanpu Wang, Guoyun Zhang, Wujing Li, Shuixiang Yu
2023 J jnl
Multim. Tools Appl.
Wujing Li, Ximing Yang, Yuze Liu, Xianfeng Ou
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xianfeng Ou, Liangzhen Liu, Bing Tu, Guoyun Zhang, Zhi Xu
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xianfeng Ou, Liangzhen Liu, Shulun Tan, Guoyun Zhang, Wujing Li, Bing Tu
2022 J jnl
Inf. Process. Manag.
Xianfeng Ou, Hanpu Wang, Wujing Li, Guoyun Zhang, Siyuan Chen
2022 J jnl
Softw. Impacts
Xianfeng Ou, Meng Wu, Siyuan Chen, Wujing Li, Guoyun Zhang
2022 J jnl
Appl. Soft Comput.
Xianfeng Ou, Meng Wu, Yuanyuan Pu, Bing Tu, Guoyun Zhang, Zhi Xu
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Bing Tu, Xianchang Yang, Xianfeng Ou, Guoyun Zhang, Jun Li, Antonio Plaza
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Bing Tu, Wangquan He, Wei He, Xianfeng Ou, Antonio Plaza
2022 J jnl
J. Vis. Commun. Image Represent.
Wei He, Jiexin Li, Qi Qi, Bing Tu, Xianfeng Ou, Longyuan Guo
2021 J jnl
J. Comput. Methods Sci. Eng.
Youli Lu, Jintong Li, Zhihe Yang, Xianfeng Ou, Wenwu Xie
2021 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Yunbo Wang, Xianfeng Ou, Jian Liang, Zhenan Sun
2020 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Bing Tu, Chengle Zhou, Xiaolong Liao, Zhi Xu, Yishu Peng, Xianfeng Ou
2020 J jnl
IEEE Access
Xianfeng Ou, Yiming Zhang, Hanpu Wang, Bing Tu, Longyuan Guo, Guoyun Zhang, Zhi Xu
2019 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Xianfeng Ou, Pengcheng Yan, Wei He, Yong Kwan Kim, Guoyun Zhang, Xin Peng, Wenjing Hu, Jianhui Wu, Longyuan Guo
2019 J jnl
J. Vis. Commun. Image Represent.
Wujing Li, Wei He, Xianfeng Ou, Wenjing Hu, Jianhui Wu, Guoyun Zhang
2019 J jnl
Remote. Sens.
Bing Tu, Nanying Li, Zhuolang Liao, Xianfeng Ou, Guoyun Zhang
2019 J jnl
Remote. Sens.
Bing Tu, Chengle Zhou, Jin Peng, Wei He, Xianfeng Ou, Zhi Xu
2019 J jnl
IEEE Access
Xianfeng Ou, Pengcheng Yan, Yiming Zhang, Bing Tu, Guoyun Zhang, Jianhui Wu, Wujing Li
2019 J jnl
Multim. Tools Appl.
Wei He, Hak-Lim Ko, Yong Kwan Kim, Jianhui Wu, Guoyun Zhang, Qi Qi, Bing Tu, Xianfeng Ou
2019 J jnl
Multim. Tools Appl.
Jianhui Wu, Feng Huang, Wenjing Hu, Wei He, Bing Tu, Longyuan Guo, Xianfeng Ou, Guoyun Zhang
2018 J jnl
Comput. Syst. Sci. Eng.
Jianhui Wu, Feng Huang, Wenjing Hu, Wei He, Bing Tu, Longyuan Guo, Xianfeng Ou
2018 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Bing Tu, Xianchang Yang, Nanying Li, Xianfeng Ou, Wei He
2018 J jnl
IEEE Geosci. Remote. Sens. Lett.
Bing Tu, Chengle Zhou, Wenlan Kuang, Longyuan Guo, Xianfeng Ou
2018 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Bing Tu, Jinping Wang, Xudong Kang, Guoyun Zhang, Xianfeng Ou, Longyuan Guo
2018 J jnl
J. Comput. Methods Sci. Eng.
Xianfeng Ou, Pengcheng Yan, Wenjing Hu, Jianhui Wu, Bing Tu, Longyuan Guo, Xin Peng, Guoyun Zhang, Peng Wang
2018 J jnl
Multim. Tools Appl.
Hong Yang, Linbo Qing, Xiaohai He, Xianfeng Ou, Xiaojuan Liu
2018 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Longyuan Guo, Shinan Li, Wenjing Hu, Jianhui Wu, Bing Tu, Wei He, Xianfeng Ou, Guoyun Zhang
2017 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Guoyun Zhang, Canqun Xiang, Xianfeng Ou, Hong Yue, Longyuan Guo, Jianhui Wu, Bing Tu, Wei He
2014 J jnl
J. Electronic Imaging
Xianfeng Ou, Enrico Masala, Linbo Qing, Xiaohai He
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}"