N. V. Subba Reddy

17 papers Misc 2Journal 9Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Inf. Technol. Decis. Mak.
P. P. Jashma Suresh, U. Dinesh Acharya, N. V. Subba Reddy
2023 J jnl
Multim. Tools Appl.
P. P. Jashma Suresh, U. Dinesh Acharya, N. V. Subba Reddy
2022 J jnl
Int. J. Intell. Inf. Database Syst.
Radhakrishna Bhat, N. V. Subba Reddy
2019 J jnl
CoRR
Mahidhar Dwarampudi, N. V. Subba Reddy
2019 J jnl
CoRR
Dwarampudi Mahidhar Reddy, N. V. Subba Reddy
2017 conf
ICACCI
Srihari Akash Chinam, N. V. Subba Reddy, K. V. Prema
2011 J jnl
BMC Bioinform.
Smitha Nair, N. V. Subba Reddy, K. S. Hareesha
2011 conf
ADCONS
Siddhaling Urolagin, K. V. Prema, N. V. Subba Reddy
2011 J jnl
Int. J. Image Graph.
Siddhaling Urolagin, K. V. Prema, N. V. Subba Reddy
2010 conf
BAIP
G. Shiva Prasad, N. V. Subba Reddy, U. Dinesh Acharya
2008 conf
Artificial Intelligence and Pattern Recognition
Krishna Moorthi Makkithaya, N. V. Subba Reddy, U. Dinesh Acharya
2004 conf
AACC
H. R. Sudarshana Reddy, N. V. Subba Reddy
1998 J jnl
Pattern Recognit. Lett.
N. V. Subba Reddy, P. Nagabhushan
1998 J jnl
Pattern Recognit.
N. V. Subba Reddy, P. Nagabhushan
1998 Misc conf
MVA
K. V. Prema, N. V. Subba Reddy
1996 Misc conf
MVA
N. V. Subba Reddy, P. Nagabhushan
1996 conf
ANZIIS
N. V. Subba Reddy, P. Nagabhushan, K. Chidananda Gowda
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())