Mahesh Subedar

30 papers A* 3A 2B 2Misc 1Journal 14Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Jiacong Sun, Man Shi, Mahesh Subedar, Georges G. E. Gielen, Marian Verhelst
2025 J jnl
CoRR
Charles Hong, Qijing Huang, Grace Dinh, Mahesh Subedar, Yakun Sophia Shao
2025 J jnl
CoRR
Davide Ettori, Nastaran Darabi, Sina Tayebati, Ranganath Krishnan, Mahesh Subedar, Omesh Tickoo, Amit Ranjan Trivedi
2025 Misc conf
ICASSP
Jiaxiang Jiang, Ibrahima J. Ndiour, Mahesh Subedar, Omesh Tickoo
2025 J jnl
CoRR
Athma Narayanan, Mahesh Subedar, Omesh Tickoo
2024 A conf
ICCAD
Chien-Yi Yang, Minxuan Zhou, Flavio Ponzina, Suraj Sathya Prakash, Raid Ayoub, Pietro Mercati, Mahesh Subedar, Tajana Rosing
2024 J jnl
CoRR
Athmanarayanan Lakshmi Narayanan, Ranganath Krishnan, Amrutha Machireddy, Mahesh Subedar
2023 A* conf
MICRO
Charles Hong, Qijing Huang, Grace Dinh, Mahesh Subedar, Yakun Sophia Shao
2023 conf
IISWC
Jun-Liang Lin, Ranganath Krishnan, Keyur Ruganathbhai Ranipa, Mahesh Subedar, Vrushabh Sanghavi, Meena Arunachalam, Omesh Tickoo, Ravishankar Iyer, Mahmut Taylan Kandemir
2022 B conf
ISPASS
Qijing Huang, Charles Hong, John Wawrzynek, Mahesh Subedar, Yakun Sophia Shao
2022 A conf
BMVC
Shashank Bujimalla, Mahesh Subedar, Omesh Tickoo
2021 J jnl
CoRR
Shashank Bujimalla, Mahesh Subedar, Omesh Tickoo
2021 J jnl
CoRR
Ranganath Krishnan, Nilesh A. Ahuja, Alok Sinha, Mahesh Subedar, Omesh Tickoo, Ravi Iyer
2021 J jnl
CoRR
Ranganath Krishnan, Alok Sinha, Nilesh A. Ahuja, Mahesh Subedar, Omesh Tickoo, Ravi Iyer
2021 J jnl
CoRR
Shashank Bujimalla, Mahesh Subedar, Omesh Tickoo
2020 J jnl
CoRR
Shashank Bujimalla, Mahesh Subedar, Omesh Tickoo
2020 A* conf
AAAI
Ranganath Krishnan, Mahesh Subedar, Omesh Tickoo
2019 J jnl
CoRR
Mahesh Subedar, Nilesh A. Ahuja, Ranganath Krishnan, Ibrahima J. Ndiour, Omesh Tickoo
2019 conf
ICCV Workshops
Ranganath Krishnan, Mahesh Subedar, Omesh Tickoo
2019 J jnl
CoRR
Ranganath Krishnan, Mahesh Subedar, Omesh Tickoo
2019 conf
CVPR Workshops
Mahesh Subedar, Ranganath Krishnan, Paulo Lopez-Meyer, Omesh Tickoo, Jonathan Huang
2019 A* conf
ICCV
Mahesh Subedar, Ranganath Krishnan, Paulo Lopez-Meyer, Omesh Tickoo, Jonathan Huang
2018 J jnl
CoRR
Ranganath Krishnan, Mahesh Subedar, Omesh Tickoo
2018 J jnl
CoRR
Mahesh Subedar, Ranganath Krishnan, Paulo Lopez-Meyer, Omesh Tickoo, Jonathan Huang
2017 conf
ICCV Workshops
Nilesh A. Ahuja, Mahesh Subedar, Omesh Tickoo, Yeongseon Lee
2015
Mahesh Subedar
2014 conf
SD&A
Mahesh Subedar, Lina J. Karam
2008 conf
CIC
Abhijit Sarkar, Mark D. Fairchild, Jorge E. Caviedes, Mahesh Subedar
2004 conf
ICASSP (3)
Mahesh Subedar, Lina J. Karam, Glen P. Abousleman
2004 B conf
ICIP
Mahesh Subedar, Lina J. Karam, Glen P. Abousleman
tests/unit/test_decompile_strings.py
← Index tests/unit/test_decompile_strings.py python
"""Unit tests for bninja/analysis/strings.py — StringAnalysis."""
import pytest
import math
from unittest.mock import MagicMock


# StringAnalysis has no binaryninja imports, just collections and math
from redb.extractors.decompiler.bninja.analysis.strings import StringAnalysis


# ============================================================================
# Helper mocks
# ============================================================================

class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, type_name="Utf8String"):
        self.value = value
        self.raw = raw if raw is not None else (value.encode("utf-8") if isinstance(value, str) else value)
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = MagicMock()
        self.type.name = type_name


class MockBinaryView:
    """Mock binary view with a strings list."""
    def __init__(self, strings=None):
        self.strings = strings or []


# ============================================================================
# 6a. StringAnalysis
# ============================================================================


class TestStringAnalysisEntropy:
    def setup_method(self):
        self.sa = StringAnalysis(bv=MockBinaryView(), functions=[])

    def test_entropy_empty_string(self):
        assert self.sa.entropy("") == 0.0

    def test_entropy_single_char(self):
        assert self.sa.entropy("aaaa") == 0.0

    def test_entropy_uniform_distribution(self):
        # "abcd" -> 4 unique chars, each p=1/4, entropy = log2(4) = 2.0
        result = self.sa.entropy("abcd")
        assert result == pytest.approx(2.0)

    def test_entropy_binary_string(self):
        # "ab" -> 2 unique chars, each p=1/2, entropy = log2(2) = 1.0
        result = self.sa.entropy("ab")
        assert result == pytest.approx(1.0)


class TestStringAnalysisAnalyze:
    def test_analyze_deduplication(self):
        """Duplicate (string, encoding) pairs -> only first kept."""
        entries = [
            MockStringEntry("hello", start=100, type_name="Utf8String"),
            MockStringEntry("hello", start=200, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        assert result[0]["string_offset"] == 100

    def test_analyze_sorted_by_address(self):
        """First occurrence (lowest offset) is the one kept."""
        entries = [
            MockStringEntry("world", start=500, type_name="Utf8String"),
            MockStringEntry("world", start=100, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        # The analyze() sorts by start, so 100 comes first
        assert result[0]["string_offset"] == 100

    def test_analyze_empty_bv(self):
        bv = MockBinaryView(strings=[])
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert result == []

    def test_analyze_output_schema(self):
        entries = [MockStringEntry("test_string", start=0, type_name="Utf8String")]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        r = result[0]
        required_keys = [
            "string",
            "string_raw",
            "string_encoding",
            "string_offset",
            "string_length",
            "string_raw_length",
            "string_entropy",
        ]
        for key in required_keys:
            assert key in r, f"Missing key: {key}"