Ralph Peeters

24 papers A* 1B 2Journal 10Unranked 10
YearRankTypeTitle / Venue / Authors
2026 A* conf
WWW
Aaron Steiner, Ralph Peeters, Christian Bizer
2025 B conf
EDBT
Ralph Peeters, Aaron Steiner, Christian Bizer
2025
Ralph Peeters
2025 conf
ICDEW
Aaron Steiner, Ralph Peeters, Christian Bizer
2025 J jnl
CoRR
Aaron Steiner, Ralph Peeters, Christian Bizer
2025 J jnl
CoRR
Ralph Peeters, Aaron Steiner, Luca Schwarz, Julian Yuya Caspary, Christian Bizer
2024 J jnl
CoRR
Aaron Steiner, Ralph Peeters, Christian Bizer
2024 conf
WWW (Companion Volume)
Ralph Peeters, Alexander Brinkmann, Christian Bizer
2024 B conf
EDBT
Ralph Peeters, Reng Chiz Der, Christian Bizer
2023 J jnl
CoRR
Ralph Peeters, Christian Bizer
2023 conf
ADBIS (Short Papers)
Ralph Peeters, Christian Bizer
2023 J jnl
CoRR
Ralph Peeters, Christian Bizer
2023 J jnl
CoRR
Ralph Peeters, Reng Chiz Der, Christian Bizer
2022 conf
WWW (Companion Volume)
Ralph Peeters, Christian Bizer
2022 conf
SemTab@ISWC
Keti Korini, Ralph Peeters, Christian Bizer
2022 conf
WWW (Companion Volume)
Ralph Peeters, Christian Bizer
2022 J jnl
CoRR
Ralph Peeters, Christian Bizer
2021 J jnl
CoRR
Ralph Peeters, Christian Bizer
2021 J jnl
Proc. VLDB Endow.
Ralph Peeters, Christian Bizer
2020 conf
DI2KG@VLDB
Ralph Peeters, Christian Bizer, Goran Glavas
2020 conf
MWPD@ISWC
Ziqi Zhang, Christian Bizer, Ralph Peeters, Anna Primpeli
2020 conf
WIMS
Ralph Peeters, Anna Primpeli, Benedikt Wichtlhuber, Christian Bizer
2019 conf
WWW (Companion Volume)
Anna Primpeli, Ralph Peeters, Christian Bizer
2019 J jnl
Datenbank-Spektrum
Christian Bizer, Anna Primpeli, Ralph Peeters
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())