J. A. Gregor Lagodzinski

23 papers A* 1A 2B 4Journal 13Unranked 3
YearRankTypeTitle / Venue / Authors
2023 conf
ACNS (1)
Kilian Becher, J. A. Gregor Lagodzinski, Javier Parra-Arnau, Thorsten Strufe
2023 J jnl
J. Comput. Syst. Sci.
Lukas Behrendt, Katrin Casel, Tobias Friedrich, J. A. Gregor Lagodzinski, Alexander Löser, Marcus Wilhelm
2022 A conf
ITCS
Davide Bilò, Katrin Casel, Keerti Choudhary, Sarel Cohen, Tobias Friedrich, J. A. Gregor Lagodzinski, Martin Schirneck, Simon Wietheger
2022 J jnl
Comput. Complex.
Katrin Casel, Philipp Fischbeck, Tobias Friedrich, Andreas Göbel, J. A. Gregor Lagodzinski
2021 J jnl
ACM Trans. Comput. Theory
Andreas Göbel, J. A. Gregor Lagodzinski, Karen Seidel
2021 J jnl
CoRR
Davide Bilò, Katrin Casel, Keerti Choudhary, Sarel Cohen, Tobias Friedrich, J. A. Gregor Lagodzinski, Martin Schirneck, Simon Wietheger
2021 B conf
FCT
Lukas Behrendt, Katrin Casel, Tobias Friedrich, J. A. Gregor Lagodzinski, Alexander Löser, Marcus Wilhelm
2021 A* conf
ICALP
J. A. Gregor Lagodzinski, Andreas Göbel, Katrin Casel, Tobias Friedrich
2020 J jnl
Theor. Comput. Sci.
Tobias Friedrich, Timo Kötzing, J. A. Gregor Lagodzinski, Frank Neumann, Martin Schirneck
2020 J jnl
Theor. Comput. Sci.
Timo Kötzing, J. A. Gregor Lagodzinski, Johannes Lengler, Anna Melnichenko
2020 conf
ICONIP (3)
Tobias Friedrich, Martin S. Krejca, J. A. Gregor Lagodzinski, Manuel Rizzo, Arthur Zahn
2020 J jnl
CoRR
J. A. Gregor Lagodzinski, Andreas Göbel, Katrin Casel, Tobias Friedrich
2020 B conf
TrustCom
Kilian Becher, J. A. Gregor Lagodzinski, Thorsten Strufe
2020 J jnl
Theor. Comput. Sci.
Benjamin Doerr, Timo Kötzing, J. A. Gregor Lagodzinski, Johannes Lengler
2019 J jnl
CoRR
Lukas Behrendt, Katrin Casel, Tobias Friedrich, J. A. Gregor Lagodzinski, Alexander Löser, Marcus Wilhelm
2019 J jnl
CoRR
Katrin Casel, Philipp Fischbeck, Tobias Friedrich, Andreas Göbel, J. A. Gregor Lagodzinski
2018 J jnl
CoRR
Benjamin Doerr, Timo Kötzing, J. A. Gregor Lagodzinski, Johannes Lengler
2018 B conf
MFCS
Andreas Göbel, J. A. Gregor Lagodzinski, Karen Seidel
2018 J jnl
CoRR
Andreas Göbel, J. A. Gregor Lagodzinski, Karen Seidel
2018 conf
PPSN (2)
Timo Kötzing, J. A. Gregor Lagodzinski, Johannes Lengler, Anna Melnichenko
2018 J jnl
CoRR
Timo Kötzing, J. A. Gregor Lagodzinski, Johannes Lengler, Anna Melnichenko
2018 B conf
SMC
Thomas Bläsius, Jan Eube, Thomas Feldtkeller, Tobias Friedrich, Martin S. Krejca, J. A. Gregor Lagodzinski, Ralf Rothenberger, Julius Severin, Fabian Sommer, Justin Trautmann
2017 A conf
GECCO
Benjamin Doerr, Timo Kötzing, J. A. Gregor Lagodzinski, Johannes Lengler
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())