Carter Bays

27 papers A 1Journal 21Unranked 1
YearRankTypeTitle / Venue / Authors
2010 ch.
Game of Life Cellular Automata
Carter Bays
2010 ch.
Game of Life Cellular Automata
Carter Bays
2009 ch.
Encyclopedia of Complexity and Systems Science
Carter Bays
2009 ch.
Encyclopedia of Complexity and Systems Science
Carter Bays
2007 J jnl
J. Cell. Autom.
Carter Bays
2006 J jnl
Complex Syst.
Carter Bays
2005 J jnl
Complex Syst.
Carter Bays
2000 J jnl
Math. Comput.
Carter Bays, Richard H. Hudson
2000 J jnl
Math. Comput.
Carter Bays, Richard H. Hudson
1994 J jnl
Complex Syst.
Carter Bays
1994 J jnl
Complex Syst.
Carter Bays
1992 J jnl
Complex Syst.
Carter Bays
1991 J jnl
Complex Syst.
Carter Bays
1991 J jnl
Simul.
Margaret Anne Pierce, Carter Bays
1990 J jnl
Complex Syst.
Carter Bays
1988 J jnl
Complex Syst.
Carter Bays
1988 J jnl
Complex Syst.
Carter Bays
1987 J jnl
Complex Syst.
Carter Bays
1987 J jnl
Complex Syst.
Carter Bays
1983 A conf
SIGCSE
Carter Bays, Stephen Mitchell, Stanley P. Franklin, Ed Dubinsky, Richard H. Austing, William Mitchell
1977 J jnl
Commun. ACM
Carter Bays
1976 J jnl
Comput. J.
Carter Bays
1976 J jnl
ACM Trans. Math. Softw.
Carter Bays, S. D. Durham
1973 J jnl
Commun. ACM
Carter Bays
1973 J jnl
Comput. J.
Carter Bays
1973 J jnl
Commun. ACM
Carter Bays
1973 conf
ACM Annual Conference
Carter Bays
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())