Xiaobo Tan

21 papers A* 2A 1C 2Journal 13Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Electron. Agric.
Preston Fairchild, Claudia Chen, Xiaobo Tan
2019 J jnl
Int. J. Distributed Syst. Technol.
Xiaobo Tan, Ji Tang, Liting Yu, Jialu Wang
2019 J jnl
IEEE Access
Fanglin Gu, Yixin Fan, Ling Wang, Xiaobo Tan, Jibo Wei
2019 C conf
ACC
Mohammad Al Janaideh, Xiaobo Tan
2017 J jnl
Int. J. Intell. Robotics Appl.
Thassyo Pinto, Le Cai, Chuan Wang, Xiaobo Tan
2014 J jnl
Int. J. Commun. Syst.
Xiaobo Tan, Hang Zhang, Zhiwen Liu, Jian Hu
2014 J jnl
Ann. des Télécommunications
Xiaobo Tan, Hang Zhang, Jian Hu
2014 J jnl
IET Commun.
Xiaobo Tan, Hang Zhang, Jian Hu
2014 J jnl
IET Commun.
Xiaobo Tan, Hang Zhang, Jian Hu
2014 J jnl
Trans. Emerg. Telecommun. Technol.
Xiaobo Tan, Hang Zhang, Qian Chen, Jian Hu
2013 J jnl
IEEE Commun. Lett.
Xiaobo Tan, Hang Zhang, Jian Hu
2013 conf
WOCC
Xiaobo Tan, Hang Zhang
2012 J jnl
KSII Trans. Internet Inf. Syst.
Xiaobo Tan, Hang Zhang
2012 C conf
ACC
Alex Esbrook, Xiaobo Tan
2011 A* conf
ICRA
Ahmad Taha Abdulsadda, Xiaobo Tan
2011 J jnl
Autom.
Bojana Drincic, Xiaobo Tan, Dennis S. Bernstein
2010 conf
WCSP
Xiaobo Tan, Hang Zhang, Yanming Sheng, Wei Lu
2008 conf
CDC
Zheng Chen, Dawn R. Hedgepeth, Xiaobo Tan
2008 A* conf
ICRA
Stephan Shatara, Xiaobo Tan, Ernest Mbemmo, Nathan Gingery, Stephan Henneberger
2006 A conf
IROS
Xiaobo Tan, Drew Kim, Nathan Usher, Dan Laboy, Joel Jackson, Azra Kapetanovic, Jason Rapai, Benjamin Sabadus, Xin Zhou
2000 J jnl
Fuzzy Sets Syst.
Xiaobo Tan, Naiyao Zhang, Luyuan Tong, Zhonghong Wang
redb/extractors/decompiler/bninja/analysis/strings.py
← Index redb/extractors/decompiler/bninja/analysis/strings.py python
from collections import Counter
import math

class StringAnalysis:
    def __init__(self, bv, functions):
        self.bv = bv
        self.functions = functions

    def entropy(self, s: str) -> float:
        """Compute Shannon entropy of a string."""
        if not s:
            return 0.0
        freq = Counter(s)
        length = len(s)
        return -sum((count / length) * math.log2(count / length) for count in freq.values())

    def analyze(self):
        """
        Extract unique strings from the binary.

        Deduplicates by (string, encoding) within the same binary, keeping the
        first occurrence (lowest offset). Cross-binary deduplication and
        aggregation is handled by ClickHouse materialized views.
        """
        strings = {}

        # Sort strings by their starting address
        sorted_entries = sorted(self.bv.strings, key=lambda e: e.start)

        for entry in sorted_entries:
            # Key is the string and its encoding
            key = (entry.value, entry.type.name)

            # Skip if this string (value + encoding) was already added.
            # Because entries are sorted by address, the first one is always kept.
            if key in strings:
                continue

            # Store only the first occurrence with schema-matching field names
            # entry.length is the raw byte length, len(entry.value) is decoded string length
            string_entry = {
                "string": entry.value,
                "string_raw": entry.raw,
                "string_encoding": entry.type.name,
                "string_offset": entry.start,
                "string_length": len(entry.value),
                "string_raw_length": entry.length,
                "string_entropy": self.entropy(entry.value),
            }

            strings[key] = string_entry

        # Return as list for export compatibility
        return list(strings.values())