Rahul Sharma

25 papers B 1C 2Journal 17Unranked 5
YearRankTypeTitle / Venue / Authors
2024 J jnl
IEEE Trans. Smart Grid
M. Imran Azim, Gayan Lankeshwara, Wayes Tushar, Rahul Sharma, Mollah R. Alam, Tapan Kumar Saha, Mohsen Khorasany, Reza Razzaghi
2024 J jnl
IEEE Access
Surina Mat Suboh, Rahul Sharma, Wayes Tushar, Nor Baizura Ahamad
2024 J jnl
Int. J. Control
Gayan Lankeshwara, Rahul Sharma
2023 J jnl
IEEE Access
Amir Taghvaie, Warnakulasuriya Tharindu Romesh Fernando, Dinesh Kumar, Firuz Zare, Rahul Sharma, D. Mahinda Vilathgamuwa
2023 J jnl
IEEE Trans. Ind. Electron.
Arash Moradi, Farzad Farajizadeh, Firuz Zare, Dinesh Kumar, R. M. Hansika Madhavi Rathnayake, Rahul Sharma, Dirk P. Kroese
2023 J jnl
CoRR
Gayan Lankeshwara, Rahul Sharma, Mollah R. Alam, Ruifeng Yan, Tapan Kumar Saha
2023 J jnl
IEEE Trans. Ind. Electron.
Edi Matijevic, Rahul Sharma, Firuz Zare, Dinesh Kumar
2022 J jnl
IEEE Access
Edi Matijevic, Rahul Sharma, Firuz Zare, Dinesh Kumar
2022 C conf
IECON
Amir Taghvaie, Firuz Zare, Rahul Sharma, Dinesh Kumar
2021 J jnl
IEEE Access
Mohammad Habibullah, Krischonme Bhumkittipich, Nadarajah Mithulananthan, Rahul Sharma, Firuz Zare
2019 J jnl
IEEE Trans. Smart Grid
Shohana Rahman Deeba, Prabir Barooah, Rahul Sharma, Jonathan Brooks, Tapan Kumar Saha
2019 conf
ICIT
Abdulrahman Alduraibi, Jalil Yaghoobi, Hansika Rathnayake, Firuz Zare, Rahul Sharma
2019 conf
ICIT
Hansika Rathnayake, Kiarash Gharani Khajeh, Firuz Zare, Rahul Sharma
2019 J jnl
Autom.
Ebby Thomas, Rahul Sharma, Yoni Nazarathy
2017 J jnl
IEEE Access
Rahul Sharma, Firuz Zare, Dragan Nesic, Arindam Ghosh
2017 J jnl
Control. Intell. Syst.
Monika Blackman, Rahul Sharma, Mithulan Nadarajah, Germane Athanasius
2013 conf
AuCC
Rahul Sharma, Ruifeng Yan, Michael Kearney
2013 J jnl
IEEE Trans. Control. Syst. Technol.
Rahul Sharma, Dragan Nesic, Chris Manzie
2012 J jnl
Control. Intell. Syst.
Rahul Sharma, Mohammad Aldeen
2011 J jnl
IEEE Trans. Control. Syst. Technol.
Rahul Sharma, Dragan Nesic, Chris Manzie
2010 C conf
CCA
Rahul Sharma, Dragan Nesic, Chris Manzie
2009 conf
CDC
Rahul Sharma, Mohammad Aldeen
2009 B conf
SMC
Tae Soo Kim, Chris Manzie, Rahul Sharma
2009 conf
CDC
Rahul Sharma, Dragan Nesic, Chris Manzie
2008 J jnl
Int. J. Control
Mohammad Aldeen, Rahul Sharma
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}"