Rajarshi Ray

49 papers A* 1A 1B 2C 4Misc 1Journal 20Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Atanu Kundu, Sauvik Gon, Rajarshi Ray
2025 J jnl
CoRR
Atanu Kundu, Pratyay Sarkar, Rajarshi Ray
2025 J jnl
CoRR
Mir Md Sajid Sarwar, Sudip Samanta, Rajarshi Ray
2025 J jnl
CoRR
Atanu Kundu, Sauvik Gon, Rajarshi Ray
2025 conf
ISEC
Sk Asif Iqbal, Mir Md Sajid Sarwar, Rajarshi Ray
2025 J jnl
CoRR
Mir Md Sajid Sarwar, Rajarshi Ray
2025 J jnl
ACM Trans. Embed. Comput. Syst.
Mir Md Sajid Sarwar, Rajarshi Ray
2025 J jnl
Theor. Comput. Sci.
Subhash Bhagat, Krishnendu Mukhopadhyaya, Rajarshi Ray
2024 conf
ISEC
Devdan Dey, Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2024 Misc conf
ICDCN
Subhash Bhagat, Paulomi Dey, Rajarshi Ray
2024 conf
ISEC
Atanu Kundu, Sauvik Gon, Rajarshi Ray
2023 J jnl
ACM Trans. Embed. Comput. Syst.
Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2023 conf
ARCH
Claudio Menghi, Paolo Arcaini, Walstan Baptista, Gidon Ernst, Georgios Fainekos, Federico Formica, Sauvik Gon, Tanmay Khandait, Atanu Kundu, Giulia Pedrielli, Jarkko Peltomäki, Ivan Porres, Rajarshi Ray, Masaki Waga, Zhenya Zhang
2023 C conf
MEMOCODE
Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2023 J jnl
Internet Things
Kamal Das, Rajarshi Ray, Soumen Moulik
2023 J jnl
ACM Trans. Embed. Comput. Syst.
Atanu Kundu, Sarthak Das, Rajarshi Ray
2022 conf
ARCH@SAFECOMP
Lei Bu, Goran Frehse, Atanu Kundu, Rajarshi Ray, Yuhui Shi, Enea Zaffanella
2021 conf
AIR
Atul Thakur, Raju Halder, Gourinath Banda, Rajarshi Ray, Ansuman Bhattacharya, Satyendra R. Nishad
2021 J jnl
CoRR
Moumita Das, Rajarshi Ray, Swarup Kumar Mohalik, Ansuman Banerjee
2021 J jnl
Innov. Syst. Softw. Eng.
Kamal Das, Amit Gurung, Rajarshi Ray
2020 C conf
MEMOCODE
Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2020 conf
ARCH
Matthias Althoff, Stanley Bak, Zongnan Bao, Marcelo Forets, Goran Frehse, Daniel Freire, Niklas Kochdumper, Yangge Li, Sayan Mitra, Rajarshi Ray, Christian Schilling, Stefan Schupp, Mark Wetzlinger
2020 conf
ARCH
Lei Bu, Alessandro Abate, Dieky Adzkiya, Muhammad Syifa'ul Mufid, Rajarshi Ray, Yuming Wu, Enea Zaffanella
2019 conf
ARCH@CPSIoTWeek
Lei Bu, Rajarshi Ray, Stefan Schupp
2019 conf
ARCH@CPSIoTWeek
Matthias Althoff, Stanley Bak, Marcelo Forets, Goran Frehse, Niklas Kochdumper, Rajarshi Ray, Christian Schilling, Stefan Schupp
2019 C conf
MEMOCODE
Bernard Nongpoh, Rajarshi Ray, Ansuman Banerjee
2019 J jnl
ACM Trans. Design Autom. Electr. Syst.
Bernard Nongpoh, Rajarshi Ray, Moumita Das, Ansuman Banerjee
2019 conf
HSCC
Sergiy Bogomolov, Goran Frehse, Amit Gurung, Dongxu Li, Georg Martius, Rajarshi Ray
2019 J jnl
Int. J. Softw. Tools Technol. Transf.
Amit Gurung, Rajarshi Ray, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu
2019 B conf
ICPE
Amit Gurung, Rajarshi Ray
2018 conf
ARCH@ADHS
Lei Bu, Rajarshi Ray, Stefan Schupp
2018 conf
ARCH@ADHS
Matthias Althoff, Stanley Bak, Xin Chen, Chuchu Fan, Marcelo Forets, Goran Frehse, Niklas Kochdumper, Yangge Li, Sayan Mitra, Rajarshi Ray, Christian Schilling, Stefan Schupp
2018 J jnl
CoRR
Amit Gurung, Rajarshi Ray
2017 conf
ARCH@CPSWeek
Lei Bu, Rajarshi Ray, Stefan Schupp
2017 conf
ARCH@CPSWeek
Matthias Althoff, Stanley Bak, Dario Cattaruzza, Xin Chen, Goran Frehse, Rajarshi Ray, Stefan Schupp
2017 J jnl
IEEE Trans. Software Eng.
Bernard Nongpoh, Rajarshi Ray, Saikat Dutta, Ansuman Banerjee
2017 J jnl
CoRR
Rajarshi Ray, Arup Deka, Kamalika Datta
2016 J jnl
CoRR
Amit Gurung, Rajarshi Ray
2016 J jnl
CoRR
Amit Gurung, Arup Deka, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu, Rajarshi Ray
2016 C conf
MEMOCODE
Amit Gurung, Arup Deka, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu, Rajarshi Ray
2016 J jnl
CoRR
Amit Gurung, Rajarshi Ray
2015 conf
HSCC
Rajarshi Ray, Amit Gurung
2015 conf
Haifa Verification Conference
Rajarshi Ray, Amit Gurung, Binayak Das, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu
2014 B conf
LCTES
Pooja Roy, Rajarshi Ray, Chundong Wang, Weng-Fai Wong
2013 A conf
SC
Wai Teng Tang, Wen Jun Tan, Rajarshi Ray, Yi Wen Wong, Weiguang Chen, Shyh-Hao Kuo, Rick Siow Mong Goh, Stephen John Turner, Weng-Fai Wong
2012
Rajarshi Ray
2012 conf
ADHS
Goran Frehse, Rajarshi Ray
2011 A* conf
CAV
Goran Frehse, Colas Le Guernic, Alexandre Donzé, Scott Cotton, Rajarshi Ray, Olivier Lebeltel, Rodolfo Ripado, Antoine Girard, Thao Dang, Oded Maler
2009 conf
ADHS
Goran Frehse, Rajarshi Ray
redb/extractors/decompiler/bninja/similarity/minhasher.py
← Index redb/extractors/decompiler/bninja/similarity/minhasher.py python
import logging
import random
from enum import Enum

from ..analysis.medium_level_normalization import MediumLevelNormalization

try:
    from .minhashcustom import MinHashCustom
    from ..analysis.low_level_normalization import LowLevelNormalization
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.similarity.minhashcustom import MinHashCustom
    from redb.extractors.decompiler.bninja.analysis.low_level_normalization import LowLevelNormalization

## Values for this configuration were extracted from https://github.com/danielplohmann/mcrit/blob/main/mcrit/config/MinHashConfig.py#L10
# Length in number of Shingles of which a minhash consists
# this value represents the length of sha256sum hash truncated
MINHASH_SIGNATURE_LENGTH: int = 64
# Number of bits per signature element (1-32 bits)
MINHASH_SIGNATURE_BITS: int = 8


class TokenKind(Enum):
    LLIL = "llil"
    TYPED_LLIL = "typed_llil"
    MLIL = "mlil"
    TYPED_MLIL = "typed_mlil"


class MinHasher:
    # stick to the default method
    MINHASH_STRATEGY_HASH_ALL = 1

    def __init__(self, seed, il_function, kind: TokenKind = TokenKind.LLIL):
        self._minhash_seeds = []
        self.il_func = il_function
        self.kind = kind
        self._minhash_permutation = []
        self._signature_segments = []
        self._initMinhashing(seed)

    def _initMinhashing(self, MINHASH_SEED=None):
        random.seed(MINHASH_SEED)
        # init sequence of seeds
        self._minhash_seeds = [
            random.randint(0, MinHashCustom.getHashMax()) for _ in range(MINHASH_SIGNATURE_LENGTH)
        ]

    def make_ngrams(self, tokens, n=3):
        """Take the ngrams of the IL we try to pass into the functions"""
        return [tuple(tokens[i:i+n]) for i in range(len(tokens) - n + 1)]

    def _extract_tokens(self):
        """Extract the IL tokens from the IL function, picking the right
        normalizer (LLIL/MLIL) and the right normalization mode
        (skeleton/typed) based on self.kind."""
        if self.kind in (TokenKind.LLIL, TokenKind.TYPED_LLIL):
            normalizer = LowLevelNormalization()
        elif self.kind in (TokenKind.MLIL, TokenKind.TYPED_MLIL):
            normalizer = MediumLevelNormalization()
        else:
            raise ValueError(f"Unsupported token kind: {self.kind}")

        # typed variants include operand type info, skeleton variants don't
        if self.kind in (TokenKind.TYPED_LLIL, TokenKind.TYPED_MLIL):
            normalize = normalizer.normalize_instr_with_operands
        else:
            normalize = normalizer.normalize_instruction_all_levels

        instructions = []
        for basic_block in self.il_func.basic_blocks:
            for il in basic_block:
                instructions.append(normalize(il))

        return instructions

    def calculateMinHash(self):
        """Calculate hash function every time, then take minimum shingle per shingler"""
        minhash_result = MinHashCustom(minhash_bits=MINHASH_SIGNATURE_BITS)
        minhash_signature = []

        tokens = self._extract_tokens()
        shingles = self.make_ngrams(tokens, n=3)

        # Functions with fewer than 3 IL instructions can't produce n-grams
        # Return empty minhash for such small functions (thunks, stubs, etc.)
        # Triggered by 39d8ad95b0323c37bd3134ab93ac4af44c66a1a8443a41c1ac02cec19bb2816a
        if not shingles:
            return []

        # Generate the MinHash
        for seed in self._minhash_seeds:
            hashed_shingles = [
                self.shingle_hash(shingle, seed) for shingle in shingles
            ]
            min_value = min(hashed_shingles)

            if MINHASH_SIGNATURE_BITS < 32:
                min_value %= (2 ** MINHASH_SIGNATURE_BITS)

            minhash_signature.append(min_value)

        minhash_result.setMinHash(minhash_signature)
        return minhash_result.getMinHashInt()

    def shingle_hash(self, shingle, hash_seed=0):
        """Produce a single 32bit UINT hash for a given shingle"""
        return MinHashCustom.hashData(shingle, hash_seed)