Maheshkumar H. Kolekar

69 papers A* 1A 3C 1Misc 1Journal 36Unranked 27
YearRankTypeTitle / Venue / Authors
2026 J jnl
Biomed. Signal Process. Control.
Agnesh Chandra Yadav, Maheshkumar H. Kolekar
2026 J jnl
Multim. Tools Appl.
Samprit Bose, Maheshkumar H. Kolekar
2025 A conf
WACV
Abhisek Ray, Ayush Raj, Maheshkumar H. Kolekar
2025 J jnl
Multim. Tools Appl.
Agnesh Chandra Yadav, Krish Shah, Aaryan Purohit, Maheshkumar H. Kolekar
2025 J jnl
J. Vis. Commun. Image Represent.
Maheshkumar H. Kolekar, Hemang Dipakbhai Chhatbar, Samprit Bose
2025 J jnl
Biomed. Signal Process. Control.
Agnesh Chandra Yadav, Maheshkumar H. Kolekar, Mukesh Kumar Zope
2025 conf
PReMI (2)
Yash Shah, Jash Vora, Maheshkumar H. Kolekar, Kiran Talele
2024 J jnl
Multim. Tools Appl.
Abhisek Ray, Nazia Aslam, Maheshkumar H. Kolekar
2024 J jnl
CoRR
Abhisek Ray, Ayush Raj, Maheshkumar H. Kolekar
2024 A* conf
CVPR
Abhisek Ray, Gaurav Kumar, Maheshkumar H. Kolekar
2024 J jnl
CoRR
Abhisek Ray, Gaurav Kumar, Maheshkumar H. Kolekar
2024 conf
ICPR (27)
Yash Sonawane, Maheshkumar H. Kolekar, Agnesh Chandra Yadav, Gargi Kadam, Sanika Tiwarekar, Dhananjay R. Kalbande
2024 J jnl
Vis. Comput.
Nazia Aslam, Maheshkumar H. Kolekar
2024 J jnl
IEEE Access
Agnesh Chandra Yadav, Maheshkumar H. Kolekar, Yash Sonawane, Gargi Kadam, Sanika Tiwarekar, Dhananjay R. Kalbande
2024 conf
ICCCNT
Gaurav Kumar, Abhisek Ray, Maheshkumar H. Kolekar
2024 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Rishi Kishore, Nazia Aslam, Maheshkumar H. Kolekar
2024 conf
BIOSTEC (1)
Agnesh Chandra Yadav, Maheshkumar H. Kolekar, Mukesh Kumar Zope
2024 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Deba Prasad Dash, Maheshkumar H. Kolekar, Chinmay Chakraborty, Mohammad Reza Khosravi
2024 J jnl
IEEE Access
Maheshkumar H. Kolekar, Samprit Bose, Abhishek Pai
2024 conf
ICPR (Workshops and Challenges, 5)
Saomyaraj Jha, Samruddhi M. Kolekar, Samprit Bose, Maheshkumar H. Kolekar, Debabrata Swain
2024 conf
ICPR (15)
Mihir Sahu, Arjun Singh, Maheshkumar H. Kolekar
2024 J jnl
J. Vis. Commun. Image Represent.
Nazia Aslam, Maheshkumar H. Kolekar
2024 J jnl
Expert Syst. Appl.
Abhisek Ray, Maheshkumar H. Kolekar
2023 J jnl
Expert Syst. J. Knowl. Eng.
S. K. Shrikanth Rao, Maheshkumar H. Kolekar, Roshan Joy Martis
2023 conf
OCIT
Abhishek Pai, Atharv Raotole, Sailee Shirodkar, Samprit Bose, Maheshkumar H. Kolekar
2023 J jnl
IEEE Access
Samprit Bose, Maheshkumar H. Kolekar, Sahil Nawale, Dhruv Khut
2023 J jnl
IEEE Trans. Instrum. Meas.
Samprit Bose, Sahil Nawale, Dhruv Khut, Maheshkumar H. Kolekar
2023 J jnl
Int. J. Inf. Manag. Data Insights
Abhisek Ray, Maheshkumar H. Kolekar, Raman Balasubramanian, Adel Hafiane
2022 J jnl
J. Vis. Commun. Image Represent.
Nazia Aslam, Prateek Kumar Rai, Maheshkumar H. Kolekar
2022 J jnl
Multim. Tools Appl.
Pranesh Gonegandla, Maheshkumar H. Kolekar
2022 J jnl
Multim. Tools Appl.
Vipul Kumar Singh, Maheshkumar H. Kolekar
2022 J jnl
Multim. Tools Appl.
Deba Prasad Dash, Maheshkumar H. Kolekar, Kamlesh Jha
2022 J jnl
Multim. Tools Appl.
Nazia Aslam, Maheshkumar H. Kolekar
2022 conf
CVIP (2)
Rishi Kishore, Nazia Aslam, Maheshkumar H. Kolekar
2021 J jnl
Biomed. Signal Process. Control.
Neelam Sharma, Maheshkumar H. Kolekar, Kamlesh Jha
2021 J jnl
Biomed. Signal Process. Control.
Chandan Kumar Jha, Maheshkumar H. Kolekar
2020 J jnl
Biomed. Signal Process. Control.
Chandan Kumar Jha, Maheshkumar H. Kolekar
2020 J jnl
Comput. Biol. Medicine
Deba Prasad Dash, Maheshkumar H. Kolekar, Kamlesh Jha
2020 J jnl
CoRR
Deepanway Ghosal, Maheshkumar H. Kolekar
2019 conf
SocProS (1)
Deba Prasad Dash, Maheshkumar H. Kolekar
2018 conf
CVIP (1)
Piyush Bhandari, Meiqing Wu, Nazia Aslam, Siew-Kei Lam, Maheshkumar H. Kolekar
2018 J jnl
Biomed. Signal Process. Control.
Chandan Kumar Jha, Maheshkumar H. Kolekar
2018 A conf
INTERSPEECH
Deepanway Ghosal, Maheshkumar H. Kolekar
2017 conf
ICACCI
Swati, Sparha Mishra, Devesh Devendra, Subhamoy Chatterjee, Maheshkumar H. Kolekar
2017 conf
CVIP (2)
Deba Prasad Dash, Maheshkumar H. Kolekar
2017 conf
ICACCI
Deba Prasad Dash, Maheshkumar H. Kolekar
2017 J jnl
Comput. Biol. Medicine
Dhiraj Manohar Dhane, Maitreya Maity, Tushar Mungle, Chittaranjan Bar, Arun Achar, Maheshkumar H. Kolekar, Chandan Chakraborty
2016 conf
ICACCI
Veer Amol Motinath, Chandan Kumar Jha, Maheshkumar H. Kolekar
2016 Misc conf
COMSNETS
Chandan Kumar Jha, Maheshkumar H. Kolekar
2016 conf
CVIP (2)
Maheshkumar H. Kolekar, Deba Prasad Dash, Priti N. Patil
2015 conf
AMCIS
Abhinash Jha, Maheshkumar H. Kolekar, Apurva Singh, Sneha Srivastava
2015 J jnl
IEEE Trans. Broadcast.
Maheshkumar H. Kolekar, Somnath Sengupta
2015 conf
NCVPRIPG
Subhomoy Bhattacharyya, Indrajit Chakrabarti, Maheshkumar H. Kolekar
2015 conf
AMCIS
Kapil Gupta, Maheshkumar H. Kolekar
2014 conf
ISI (1)
Alok Kumar Verma, Somnath Sarangi, Maheshkumar H. Kolekar
2014 J jnl
Comput. Electr. Eng.
Alok Kumar Verma, Somnath Sarangi, Maheshkumar H. Kolekar
2014 C conf
ICSEng
Himanshu Rai, Maheshkumar H. Kolekar, Neelabh Keshav, J. K. Mukherjee
2012 conf
IHCI
Alok Kumar Singh Kushwaha, Om Prakash, Ashish Khare, Maheshkumar H. Kolekar
2012 conf
CUBE
Alok Kumar Singh Kushwaha, Maheshkumar H. Kolekar, Ashish Khare
2011 J jnl
Multim. Tools Appl.
Maheshkumar H. Kolekar
2010 J jnl
Multim. Tools Appl.
Maheshkumar H. Kolekar, Somnath Sengupta
2009 conf
ICCV Workshops
Maheshkumar H. Kolekar, Kannappan Palaniappan, Somnath Sengupta, Guna Seetharaman
2009 J jnl
J. Multim.
Maheshkumar H. Kolekar, Kannappan Palaniappan, Somnath Sengupta, Gunasekaran S. Seetharaman
2008 conf
ICVGIP
Maheshkumar H. Kolekar, Kannappan Palaniappan, Somnath Sengupta
2006 conf
ACCV (2)
Maheshkumar H. Kolekar, Somnath Sengupta
2006 A conf
ICME
Maheshkumar H. Kolekar, Somnath Sengupta
2006 conf
MobiMedia
Maheshkumar H. Kolekar, Somnath Sengupta
2005 conf
IICAI
Maheshkumar H. Kolekar, Somnath Sengupta
2004 conf
ICVGIP
Maheshkumar H. Kolekar, Somnath Sengupta
tests/unit/test_decompile_medium_level.py
← Index tests/unit/test_decompile_medium_level.py python
# tests/unit/test_decompile_medium_level.py
"""Unit tests (mocked BN) for bninja/analysis/medium_level.py
   and bninja/analysis/medium_level_normalization.py."""
# tests/unit/test_decompile_medium_level.py
import sys
from unittest.mock import MagicMock, patch

# Installa gli stubs BN
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

# ── Definisci MockMLILInstruction PRIMA di importare il modulo ──
class MockMLILInstruction:
    def __init__(self, operation, address=0, operands=None):
        self.operation = operation
        self.address = address
        self.operands = operands or []

# ── Patcha il modulo BN in modo che isinstance() funzioni ──
sys.modules["binaryninja"].MediumLevelILInstruction = MockMLILInstruction
sys.modules["binaryninja"].SSAVariable = type("SSAVariable", (), {})
sys.modules["binaryninja"].Variable = type("Variable", (), {})
sys.modules["binaryninja"].ILIntrinsic = type("ILIntrinsic", (), {})

# Ora importa il modulo — vede già i tipi corretti
from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import (
    MediumLevelNormalization,
)	

class MockMLILFunction:
    def __init__(self, instructions):
        self._instructions = instructions

    @property
    def instructions(self):
        return iter(self._instructions)

    @property
    def basic_blocks(self):
        # one block containing all instructions, good enough for MinHasher
        block = MagicMock()
        block.__iter__ = lambda self_: iter([])  # not used by MediumLevelAnalysis
        return [block]


class MockFunction:
    def __init__(self, name="func", start=0x1000, mlil=None):
        self.name = name
        self.start = start
        self.mlil = mlil



class TestMediumLevelNormalization:
    def setup_method(self):
        from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import (
            MediumLevelNormalization,
        )
        self.norm = MediumLevelNormalization()

    def test_normalize_skeleton_single_instruction(self):
        il = MockMLILInstruction(operation=42, operands=[])
        result = self.norm.normalize_instruction_all_levels(il)
        assert result == [42]

    def test_normalize_skeleton_nested(self):
        inner = MockMLILInstruction(operation=7, operands=[])
        outer = MockMLILInstruction(operation=1, operands=[inner])
        result = self.norm.normalize_instruction_all_levels(outer)
        assert result == [1, 7]

    def test_normalize_skeleton_with_list_operand(self):
        inner_a = MockMLILInstruction(operation=10, operands=[])
        inner_b = MockMLILInstruction(operation=11, operands=[])
        outer = MockMLILInstruction(operation=2, operands=[[inner_a, inner_b]])
        result = self.norm.normalize_instruction_all_levels(outer)
        assert result == [2, 10, 11]

    def test_normalize_skeleton_none(self):
        result = self.norm.normalize_instruction_all_levels(None)
        # collect on None should leave ops empty
        assert result == []

    def test_normalize_typed_appends_leaf_types(self):
        # operand is a plain int -> "CONST"
        il = MockMLILInstruction(operation=3, operands=[42])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [3, "CONST"]

    def test_normalize_typed_bool_before_int(self):
        # bool must be detected before int (since bool is an int subclass)
        il = MockMLILInstruction(operation=4, operands=[True])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [4, "BOOL"]

    def test_normalize_typed_float(self):
        il = MockMLILInstruction(operation=5, operands=[1.5])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [5, "FLOAT_CONST"]

    def test_normalize_typed_str(self):
        il = MockMLILInstruction(operation=6, operands=["hello"])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [6, "STR"]

    def test_normalize_typed_unknown_falls_back_to_typename(self):
        class Weird:
            pass
        il = MockMLILInstruction(operation=8, operands=[Weird()])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [8, "WEIRD"]

    def test_normalize_typed_nested_mlil(self):
        inner = MockMLILInstruction(operation=99, operands=[7])
        outer = MockMLILInstruction(operation=1, operands=[inner])
        result = self.norm.normalize_instr_with_operands(outer)
        assert result == [1, 99, "CONST"]

    def test_normalize_typed_list_mixed(self):
        inner = MockMLILInstruction(operation=50, operands=[])
        il = MockMLILInstruction(operation=2, operands=[[inner, 99]])
        result = self.norm.normalize_instr_with_operands(il)
        assert result == [2, 50, "CONST"]


class TestMediumLevelAnalysis:
    def _make_analysis(self, instructions=None, mlil=True, start=0x1000):
        from redb.extractors.decompiler.bninja.analysis.medium_level import (
            MediumLevelAnalysis,
        )
        mlil_func = MockMLILFunction(instructions or []) if mlil else None
        func = MockFunction(name="testfunc", start=start, mlil=mlil_func)
        bv = MagicMock()
        return MediumLevelAnalysis(func, bv, MagicMock())

    def test_collect_returns_empty_when_no_mlil(self):
        a = self._make_analysis(mlil=False)
        sk, sk_addr, ty, ty_addr = a._collect_mlil_skeleton_and_typed()
        assert sk == [] and sk_addr == [] and ty == [] and ty_addr == []

    def test_collect_skeleton_and_typed_basic(self):
        instrs = [
            MockMLILInstruction(operation=1, address=0x1000, operands=[]),
            MockMLILInstruction(operation=2, address=0x1004, operands=[42]),
        ]
        a = self._make_analysis(instructions=instrs, start=0x1000)
        sk, sk_addr, ty, ty_addr = a._collect_mlil_skeleton_and_typed()

        assert sk == [[1], [2]]
        assert ty == [[1], [2, "CONST"]]
        assert sk_addr == [(0, [1]), (4, [2])]
        assert ty_addr == [(0, [1]), (4, [2, "CONST"])]

    def test_collect_negative_offset_clamped_to_zero(self):
        instrs = [
            MockMLILInstruction(operation=1, address=0x900, operands=[]),
        ]
        a = self._make_analysis(instructions=instrs, start=0x1000)
        _, sk_addr, _, ty_addr = a._collect_mlil_skeleton_and_typed()
        assert sk_addr[0][0] == 0
        assert ty_addr[0][0] == 0

    def test_log_error_records_entry(self):
        a = self._make_analysis()
        a.log_error("boom", "fname", 0x1234, ValueError("x"), "loc")
        assert len(a.errors) == 1
        err = a.errors[0]
        assert err["function_name"] == "fname"
        assert err["function_address"] == "4660"  # hex 0x1234
        assert err["error_location"] == "loc"
        assert err["error_message"] == "boom"
        assert err["error_type"] == "ValueError"
        assert "timestamp" in err

    @patch(
        "redb.extractors.decompiler.bninja.analysis.medium_level.MinHasher"
    )
    def test_analyze_returns_expected_keys(self, mock_minhasher):
        mock_minhasher.return_value.calculateMinHash.return_value = [1, 2, 3]

        instrs = [
            MockMLILInstruction(operation=1, address=0x1000, operands=[]),
            MockMLILInstruction(operation=2, address=0x1004, operands=[42]),
            MockMLILInstruction(operation=3, address=0x1008, operands=[]),
        ]
        a = self._make_analysis(instructions=instrs, start=0x1000)
        result, errors = a.analyze()

        expected_keys = {
            "function_address",
            "body_mlil_skeleton_vector",
            "sha256_mlil_skeleton",
            "tlsh_mlil_skeleton",
            "minhash_mlil_skeleton",
            "body_mlil_typed_vector",
            "sha256_mlil_typed",
            "tlsh_mlil_typed",
            "minhash_mlil_typed",
        }
        assert set(result.keys()) == expected_keys
        assert result["function_address"] == 0x1000
        assert result["minhash_mlil_skeleton"] == [1, 2, 3]
        assert result["minhash_mlil_typed"] == [1, 2, 3]
        assert errors == []

    @patch(
        "redb.extractors.decompiler.bninja.analysis.medium_level.MinHasher"
    )
    def test_analyze_empty_mlil(self, mock_minhasher):
        mock_minhasher.return_value.calculateMinHash.return_value = []
        a = self._make_analysis(mlil=False)
        result, errors = a.analyze()
        assert result["body_mlil_skeleton_vector"] == []
        assert result["body_mlil_typed_vector"] == []
        assert errors == []

    @patch(
        "redb.extractors.decompiler.bninja.analysis.medium_level.MinHasher"
    )
    def test_analyze_sha256_differs_skeleton_vs_typed(self, mock_minhasher):
        mock_minhasher.return_value.calculateMinHash.return_value = []

        instrs = [
            MockMLILInstruction(operation=1, address=0x1000, operands=[42]),
            MockMLILInstruction(operation=2, address=0x1004, operands=["foo"]),
            MockMLILInstruction(operation=3, address=0x1008, operands=[True]),
        ]
        a = self._make_analysis(instructions=instrs)
        result, _ = a.analyze()
        # skeleton ignores operand leaves, typed includes them -> different hashes
        assert result["sha256_mlil_skeleton"] != result["sha256_mlil_typed"]


class TestMinHasherMLILKinds:
    def _make_func(self, instrs):
        # MinHasher iterates basic_blocks then over each block
        block = MagicMock()
        block.__iter__ = lambda self_: iter(instrs)
        f = MagicMock()
        f.basic_blocks = [block]
        return f

    def test_mlil_skeleton_uses_medium_normalizer(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import (
            MinHasher, TokenKind,
        )
        instrs = [
            MockMLILInstruction(operation=i, operands=[]) for i in range(5)
        ]
        func = self._make_func(instrs)
        hasher = MinHasher(seed=42, il_function=func, kind=TokenKind.MLIL)
        result = hasher.calculateMinHash()
        # 5 instructions -> 3 trigrams -> non-empty signature
        assert result != []

    def test_typed_mlil_differs_from_skeleton(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import (
            MinHasher, TokenKind,
        )
        instrs = [
            MockMLILInstruction(operation=1, operands=[42]),
            MockMLILInstruction(operation=2, operands=["s"]),
            MockMLILInstruction(operation=3, operands=[True]),
            MockMLILInstruction(operation=4, operands=[1.5]),
        ]
        func = self._make_func(instrs)
        skel = MinHasher(seed=42, il_function=func, kind=TokenKind.MLIL).calculateMinHash()
        typed = MinHasher(seed=42, il_function=func, kind=TokenKind.TYPED_MLIL).calculateMinHash()
        # Same seed, same instructions, but typed has extra leaf tokens
        # -> hashes should generally differ
        assert skel != typed

    def test_mlil_too_few_instructions(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import (
            MinHasher, TokenKind,
        )
        instrs = [MockMLILInstruction(operation=1, operands=[])] * 2
        func = self._make_func(instrs)
        hasher = MinHasher(seed=42, il_function=func, kind=TokenKind.MLIL)
        assert hasher.calculateMinHash() == []

    def test_unsupported_kind_raises(self):
        from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
        func = self._make_func([])
        hasher = MinHasher(seed=42, il_function=func, kind="bogus")
        with pytest.raises(ValueError):
            hasher.calculateMinHash()