R. Nadarajan

38 papers B 2C 3Misc 1Journal 15Unranked 17
YearRankTypeTitle / Venue / Authors
2020 J jnl
Expert Syst. Appl.
B. Malar, R. Nadarajan
2019 J jnl
Knowl. Inf. Syst.
B. Malar, R. Nadarajan, J. Gowri Thangam
2017 J jnl
J. Real Time Image Process.
G. Uma Vetri Selvi, R. Nadarajan
2016 J jnl
Wirel. Pers. Commun.
Ilayaraja N., Mary Magdalene Jane F., Maytham Safar, R. Nadarajan
2015 conf
MCSS
R. Latha, R. Nadarajan
2015 conf
MIKE
R. Latha, R. Nadarajan
2014 B conf
NSS
N. Rajamanickam, R. Nadarajan, Atilla Elçi
2013 conf
PReMI
Geetha Ganapathi, R. Nadarajan
2013 conf
ICACNI
M. Thilagu, R. Nadarajan
2013 J jnl
Knowl. Inf. Syst.
B. Malar, R. Nadarajan
2013 C conf
SIN
N. Rajamanickam, R. Nadarajan
2013 J jnl
Future Gener. Comput. Syst.
Luis Miguel Vaquero, Suksant Sae Lor, José M. Alcaraz Calero, Dusit Niyato, Stuart Clayman, Dev Audsin, R. Nadarajan
2013 conf
CISIM
R. Latha, R. Nadarajan
2011 conf
ACC (2)
M. Thilagu, R. Nadarajan
2011 conf
DICTAP (2)
Ilayaraja N., Mary Magdalene Jane F., I. Thomson, C. Vikram Narayan, R. Nadarajan, Maytham Safar
2010 J jnl
Int. J. Bus. Data Commun. Netw.
Mary Magdalene Jane F., R. Nadarajan, Maytham Safar
2010 conf
ICDIP
G. Uma Vetri Selvi, R. Nadarajan
2009 J jnl
Informatica (Slovenia)
I. Elizabeth Shanthi, R. Nadarajan
2009 J jnl
J. Digit. Inf. Manag.
Mary Magdalene Jane F., Ilayaraja N., R. Nadarajan, Maytham Safar
2009 C conf
iiWAS
Mary Magdalene Jane F., Ilayaraja N., Ashwin Raghav M., R. Nadarajan, Maytham Safar
2009 C conf
MoMM
Mary Magdalene Jane F., Ilayaraja N., Ashwin Raghav M., R. Nadarajan, Maytham Safar
2009 J jnl
Int. J. Inf. Technol. Web Eng.
L. Robert, R. Nadarajan
2009 J jnl
IET Softw.
L. Robert, R. Nadarajan
2008 conf
Bangalore Compute Conf.
B. Kalpana, R. Nadarajan, J. Senthil Babu
2008 B conf
DASFAA
B. Kalpana, R. Nadarajan, J. Senthil Babu
2008 conf
Bangalore Compute Conf.
I. Elizabeth Shanthi, Y. Izaaz, R. Nadarajan
2008 conf
PETRA
Mary Magdalene Jane F., R. Parameswaran, R. Nadarajan, Maytham Safar
2008 J jnl
J. Digit. Inf. Manag.
Maytham Safar, Dariush Ebrahimi, Mary Magdalene Jane F., R. Nadarajan
2007 conf
IICAI
Yaser Nouh, Varunkumar Nagarajan, R. Nadarajan
2007 conf
AWIC
Yaser Nouh, Varunkumar Nagarajan, R. Nadarajan, Maytham Safar
2007 conf
IMECS
B. Kalpana, R. Nadarajan, Rukaiya Moyyad
2007 conf
FSKD (4)
A. Muthukumar, R. Nadarajan
2006 conf
ICDIM
Yaser Nouh, P. Karthikeyani, R. Nadarajan
2006 conf
ITNG
L. Robert, R. Nadarajan
2003 Misc conf
International Conference on Computational Science
B. Suresh, R. Nadarajan
1998 J jnl
Comput. Oper. Res.
G. V. Krishna Reddy, R. Nadarajan, R. Arumuganathan
1993 J jnl
Comput. Oper. Res.
G. V. Krishna Reddy, R. Nadarajan, P. R. Kandasamy
1982 J jnl
Oper. Res.
Marcel F. Neuts, R. Nadarajan
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}"