Xianghong Jasmine Zhou

31 papers A* 2B 1Misc 1Journal 22Unranked 5
YearRankTypeTitle / Venue / Authors
2022 J jnl
J. Comput. Biol.
Ran Hu, Xianghong Jasmine Zhou, Wenyuan Li
2019 J jnl
Bioinform.
Jianrong Li, Chun-Yip Tong, Tsai-Jung Sung, Ting-Yu Kang, Xianghong Jasmine Zhou, Chun-Chi Liu
2016 J jnl
Nucleic Acids Res.
Jianrong Li, Chuan-Hu Sun, Wenyuan Li, Rou-Fang Chao, Chieh-Chen Huang, Xianghong Jasmine Zhou, Chun-Chi Liu
2015 J jnl
J. Comput. Biol.
Quan Chen, Xianghong Jasmine Zhou, Fengzhu Sun
2015 J jnl
Bioinform.
Wenyuan Li, Ke Gong, Qingjiao Li, Frank Alber, Xianghong Jasmine Zhou
2015 J jnl
BMC Genom.
Yu-Ting Tseng, Wenyuan Li, Ching-Hsien Chen, Shi-Hua Zhang, Jeremy J. W. Chen, Xianghong Jasmine Zhou, Chun-Chi Liu
2015 J jnl
BMC Bioinform.
Wenhui Wang, Xianghong Jasmine Zhou, Zhenqiu Liu, Fengzhu Sun
2014 J jnl
Nucleic Acids Res.
Chun-Chi Liu, Yu-Ting Tseng, Wenyuan Li, Chia-Yu Wu, Ilya Mayzus, Andrey Rzhetsky, Fengzhu Sun, Michael S. Waterman, Jeremy J. W. Chen, Preet M. Chaudhary, Joseph Loscalzo, Edward Crandall, Xianghong Jasmine Zhou
2012 J jnl
J. Comput. Biol.
Wenyuan Li, Chao Dai, Chun-Chi Liu, Xianghong Jasmine Zhou
2012 J jnl
Bioinform.
Wenyuan Li, Shi-Hua Zhang, Chun-Chi Liu, Xianghong Jasmine Zhou
2012 J jnl
BMC Syst. Biol.
Chao Dai, Wenyuan Li, Juan Liu, Xianghong Jasmine Zhou
2012 J jnl
J. Comput. Biol.
Ting Chen, Paul Marjoram, Fengzhu Sun, Xianghong Jasmine Zhou
2011 J jnl
Bioinform.
Shi-Hua Zhang, Qingjiao Li, Juan Liu, Xianghong Jasmine Zhou
2011 J jnl
PLoS Comput. Biol.
Wenyuan Li, Chun-Chi Liu, Tong Zhang, Haifeng Li, Michael S. Waterman, Xianghong Jasmine Zhou
2010 J jnl
BMC Bioinform.
Michael R. Mehan, Juan Nunez-Iglesias, Chao Dai, Michael S. Waterman, Xianghong Jasmine Zhou
2010 J jnl
J. Biomed. Informatics
Wenyuan Li, Min Xu, Xianghong Jasmine Zhou
2009 J jnl
J. Comput. Biol.
Michael R. Mehan, Juan Nunez-Iglesias, Mrinal Kalakrishnan, Michael S. Waterman, Xianghong Jasmine Zhou
2009 conf
AAAI Spring Symposium: Learning by Reading and Learning to Read
Rutu Mulkar-Mehta, Jerry R. Hobbs, Chun-Chi Liu, Xianghong Jasmine Zhou
2009 Misc conf
Pacific Symposium on Biocomputing
Ruoming Jin, Scott McCallen, Chun-Chi Liu, Yang Xiang, Eivind Almaas, Xianghong Jasmine Zhou
2009 J jnl
BMC Bioinform.
Chun-Chi Liu, Jianjun Hu, Mrinal Kalakrishnan, Haiyan Huang, Xianghong Jasmine Zhou
2008 B conf
RECOMB
Michael R. Mehan, Juan Nunez-Iglesias, Mrinal Kalakrishnan, Michael S. Waterman, Xianghong Jasmine Zhou
2007 conf
ISMB/ECCB (Supplement of Bioinformatics)
Xifeng Yan, Michael R. Mehan, Yu Huang, Michael S. Waterman, Philip S. Yu, Xianghong Jasmine Zhou
2007 conf
BIOCOMP
Min Xu, Ming-Chih J. Kao, Juan Nunez-Iglesias, Joseph Nevins, Mike West, Xianghong Jasmine Zhou
2007 J jnl
Nucleic Acids Res.
Fei Pan, Chi-Hsien Chiu, Sudip Pulapura, Michael R. Mehan, Juan Nunez-Iglesias, Kangyu Zhang, Kiran Kamath, Michael S. Waterman, Caleb E. Finch, Xianghong Jasmine Zhou
2007 conf
ISMB/ECCB (Supplement of Bioinformatics)
Yu Huang, Haifeng Li, Haiyan Hu, Xifeng Yan, Michael S. Waterman, Haiyan Huang, Xianghong Jasmine Zhou
2006 J jnl
Bioinform.
Fei Pan, Kiran Kamath, Kangyu Zhang, Sudip Pulapura, Avinash Achar, Juan Nunez-Iglesias, Yu Huang, Xifeng Yan, Jiawei Han, Haiyan Hu, Min Xu, Jianjun Hu, Xianghong Jasmine Zhou
2006 J jnl
BMC Bioinform.
Jianjun Hu, Haifeng Li, Michael S. Waterman, Xianghong Jasmine Zhou
2005 A* conf
ICDE
Xifeng Yan, Xianghong Jasmine Zhou, Jiawei Han
2005 A* conf
KDD
Xifeng Yan, Xianghong Jasmine Zhou, Jiawei Han
2005 conf
ISMB (Supplement of Bioinformatics)
Haiyan Hu, Xifeng Yan, Yu Huang, Jiawei Han, Xianghong Jasmine Zhou
2004 J jnl
J. Comput. Biol.
Haiyan Huang, Ming-Chih J. Kao, Xianghong Jasmine Zhou, Jun S. Liu, Wing Hung Wong
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}"