Radu Marinescu

39 papers A 2B 1C 1Misc 3Journal 3Unranked 27
YearRankTypeTitle / Venue / Authors
2023 J jnl
IEEE Access
Andy Molin, Andrei Mario Rivis, Radu Marinescu
2019 conf
ICSTCC
Cristina Marinescu, Radu Marinescu
2017 J jnl
Sci. Comput. Program.
George Ganea, Ioana Verebi, Radu Marinescu
2015 A conf
MSR
Radu Marinescu
2015 Misc conf
SYNASC
George Ganea, Radu Marinescu
2012 J jnl
IBM J. Res. Dev.
Radu Marinescu
2012 conf
CSMR
Radu Marinescu
2012 conf
CSMR
Radu Marinescu
2011 C conf
SCAM
Radu Marinescu, Cristina Marinescu
2011 conf
WCRE
Mihai Codoban, Cristina Marinescu, Radu Marinescu
2010 ed.
ICSM
Radu Marinescu, Michele Lanza, Andrian Marcus
2010 conf
ICSM
Radu Marinescu, Michele Lanza, Andrian Marcus
2010 conf
CSMR
Radu Marinescu, George Ganea, Ioana Verebi
2009 conf
CSMR
Petru Florin Mihancea, Radu Marinescu
2009 conf
WCRE
Daniel Ratiu, Radu Marinescu, Jan Jürjens
2008 conf
CSMR
Adrian Dozsa, Tudor Gîrba, Radu Marinescu
2008 conf
CSMR
Dan C. Cosma, Radu Marinescu
2007 B conf
VISSOFT
Dan C. Cosma, Radu Marinescu
2007 Misc conf
SYNASC
Petru Florin Mihancea, George Ganea, Ioana Verebi, Cristina Marinescu, Radu Marinescu
2007 conf
ICSM
Mihai Balint, Petru Florin Mihancea, Tudor Gîrba, Radu Marinescu
2007 conf
FAMOOSr@TOOLS
Mihai Balint, Petru Florin Mihancea, Radu Marinescu, Michele Lanza
2007 conf
IWPSE
Tudor Gîrba, Stéphane Ducasse, Adrian Kuhn, Radu Marinescu, Daniel Ratiu
2006 A conf
ICPC
Mihai Balint, Radu Marinescu, Tudor Gîrba
2006 book
Michele Lanza, Radu Marinescu
2005 Misc conf
SYNASC
Richard Wettel, Radu Marinescu
2005 conf
WCRE
Adrian Trifu, Radu Marinescu
2005 conf
ICSM
Radu Marinescu
2005 conf
IWPSE
Serge Demeyer, Filip Van Rysselberghe, Tudor Gîrba, Jacek Ratzinger, Radu Marinescu, Tom Mens, Bart Du Bois, Dirk Janssens, Stéphane Ducasse, Michele Lanza, Matthias Rieger, Harald C. Gall, Mohammad El-Ramly
2005 conf
IEEE METRICS
Cristina Marinescu, Radu Marinescu, Tudor Gîrba
2005 conf
CSMR
Petru Florin Mihancea, Radu Marinescu
2005 conf
ICSM (Industrial and Tool Volume)
Cristina Marinescu, Radu Marinescu, Petru Florin Mihancea, Daniel Ratiu, Richard Wettel
2004 conf
ICSM
Radu Marinescu
2004 conf
WCRE
Radu Marinescu, Daniel Ratiu
2004 conf
CSMR
Daniel Ratiu, Stéphane Ducasse, Tudor Gîrba, Radu Marinescu
2001 conf
TOOLS (39)
Radu Marinescu
1999 conf
TOOLS (31)
Radu Marinescu
1999 conf
ECOOP Workshops
Anne-Marie Sassen, Radu Marinescu
1999 conf
ECOOP Workshops
Radu Marinescu
1998 conf
ECOOP Workshops
Radu Marinescu
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())