Xian Wang

15 papers A 3Misc 4Journal 5Unranked 3
YearRankTypeTitle / Venue / Authors
2017 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Debashis Banerjee, Barry John Muldrey, Xian Wang, Shreyas Sen, Abhijit Chatterjee
2016 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Nicholas Tzou, Debesh Bhatta, Xian Wang, Te-Hui Chen, Sen-Wen Hsiao, Barry J. Muldrey, Hyun Woo Choi, Abhijit Chatterjee
2015 conf
LATS
Xian Wang, Kenfack Blanchard, Estella Silva, Abhijit Chatterjee
2015 J jnl
J. Electron. Test.
Nicholas Tzou, Debesh Bhatta, Barry J. Muldrey, Thomas Moon, Xian Wang, Hyun Woo Choi, Abhijit Chatterjee
2015 Misc conf
VTS
Xian Wang, Debashis Banerjee, Abhijit Chatterjee
2015 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Debashis Banerjee, Shyam Kumar Devarakond, Xian Wang, Shreyas Sen, Abhijit Chatterjee
2014 A conf
ITC
Xian Wang, Blanchard Kenfack, Estella Silva, Abhijit Chatterjee
2014 Misc conf
VTS
Xian Wang, Blanchard Kenfack, Estella Silva, Abhijit Chatterjee
2014 J jnl
J. Electron. Test.
Sen-Wen Hsiao, Xian Wang, Abhijit Chatterjee
2014 A conf
ICCAD
Debashis Banerjee, Barry John Muldrey, Shreyas Sen, Xian Wang, Abhijit Chatterjee
2013 conf
Asian Test Symposium
Sen-Wen Hsiao, Xian Wang, Abhijit Chatterjee
2013 conf
Asian Test Symposium
Xian Wang, Blanchard Kenfack, Estella Silva, Abhijit Chatterjee
2012 Misc conf
VTS
Nicholas Tzou, Thomas Moon, Xian Wang, Hyun Woo Choi, Abhijit Chatterjee
2012 A conf
ITC
Xian Wang, Hyun Woo Choi, Thomas Moon, Nicholas Tzou, Abhijit Chatterjee
2012 Misc conf
VTS
Thomas Moon, Nicholas Tzou, Xian Wang, Hyun Woo Choi, Abhijit Chatterjee
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())