Ralf-Detlef Kutsche

41 papers A 2B 2C 1Misc 1Journal 4Unranked 21
YearRankTypeTitle / Venue / Authors
2020 ed.
eBISS
Ralf-Detlef Kutsche, Esteban Zimányi
2018 conf
MODELSWARD (Revised Selected Papers)
Henning Agt-Rickauer, Ralf-Detlef Kutsche, Harald Sack
2018 C conf
MODELSWARD
Henning Agt-Rickauer, Ralf-Detlef Kutsche, Harald Sack
2015 ed.
eBISS
Esteban Zimányi, Ralf-Detlef Kutsche
2013 A conf
CAiSE
Henning Agt, Ralf-Detlef Kutsche
2011 conf
SPLASH Workshops
Henning Agt, Ralf-Detlef Kutsche, Timo Wegeler
2011 B conf
ECMFA
Ralf-Detlef Kutsche, Nikola Milanovic
2011 conf
CAiSE Workshops
Henning Agt, Gregor Bauhoff, Ralf-Detlef Kutsche, Nikola Milanovic
2011 conf
GI-Jahrestagung
Ralf-Detlef Kutsche
2009 ed.
UNISCON
Jianhua Yang, Athula Ginige, Heinrich C. Mayr, Ralf-Detlef Kutsche
2009 conf
UNISCON
Henning Agt, Gregor Bauhoff, Mario Cartsburg, Daniel Kumpe, Ralf-Detlef Kutsche, Nikola Milanovic
2009 conf
ECMDA-FA
Nikola Milanovic, Mario Cartsburg, Ralf-Detlef Kutsche, Jürgen Widiker, Frank Kschonsak
2008 conf
UNISCON
Ralf-Detlef Kutsche, Nikola Milanovic
2008 A conf
MoDELS
Nikola Milanovic, Ralf-Detlef Kutsche, Timo Baum, Mario Cartsburg, Hatice Elmasgünes, Marco Pohl, Jürgen Widiker
2008 ed.
MBSDI
Ralf-Detlef Kutsche, Nikola Milanovic
2004 ed.
Multikonferenz Wirtschaftsinformatik (MKWI), Universität Duisburg-Essen, 9.-11. März 2004, Band 2: Informationssysteme in Industrie und Handel; Business intelligence; Knowledge supply and information logistics in enterprises andnetworked organizations; Organisationale Intelligenz
MKWI (2)
Peter Chamoni, Peter Loos, Wolfgang Deiters, Ralf-Detlef Kutsche, Kurt Sandkuhl, Norbert Gronau, Heiner Müller-Merbach, Bodo Rieger
2003 conf
BNCOD Posters
Florian Jung, Ralf-Detlef Kutsche, Dirk Rother
2003 conf
EFIS
Wolfgang Sigel, Susanne Busse, Ralf-Detlef Kutsche, Meike Klettke
2003 conf
Grundlagen von Datenbanken
Ralf-Detlef Kutsche
2003 conf
UML
Jörn Guy Süß, Andreas Leicher, Herbert Weber, Ralf-Detlef Kutsche
2003 conf
BNCOD Posters
Florian Jung, Ralf-Detlef Kutsche, Dirk Rother
2002 B ed.
FASE
Ralf-Detlef Kutsche, Herbert Weber
2002 J jnl
Comput. J.
Stefan Conrad, Wilhelm Hasselbring, Anne E. James, Dalen Kambur, Ralf-Detlef Kutsche, Philippe Thiran
2001 ed.
EFIS
Ralf-Detlef Kutsche, Stefan Conrad, Wilhelm Hasselbring
2001 ed.
Föderierte Datenbanken
Andreas Bauer, Susanne Busse, Ralf-Detlef Kutsche, Wolfgang Lehner
2000 J jnl
SIGMOD Rec.
Wilhelm Hasselbring, Willem-Jan van den Heuvel, Geert-Jan Houben, Ralf-Detlef Kutsche, Bodo Rieger, Mark Roantree, Kazimierz Subieta
2000 conf
EFIS
Susanne Busse, Ralf-Detlef Kutsche, Ulf Leser
1999 ed.
Föderierte Datenbanken
Ralf-Detlef Kutsche, Ulf Leser, Johann Christoph Freytag
1999 conf
MD
Ralf-Detlef Kutsche, Asuman Sünbül
1999 J jnl
SIGMOD Rec.
Stefan Conrad, Wilhelm Hasselbring, Uwe Hohenstein, Ralf-Detlef Kutsche, Mark Roantree, Gunter Saake, Fèlix Saltor
1999 conf
German-Argentinian Workshop on Information Technology
Herbert Weber, Marcus Klar, Stefan Mann, Ralf-Detlef Kutsche, Stefan Jähnichen, Robert Büssow, Hartmut Ehrig, Robert Geisler, Gabriel Baum, Claudia Pons, Miguel Felder, Sergio Waldoke
1998 conf
SCCC
Ralf-Detlef Kutsche, Asuman Sünbül
1995 J jnl
Datenbank Rundbr.
Ralf-Detlef Kutsche
1994
Ralf-Detlef Kutsche
1993 conf
Open Distributed Processing
Horst Hansen, Ralf-Detlef Kutsche
1991 conf
Grundlagen von Datenbanken
Ralf-Detlef Kutsche
1991 Misc conf
BTW
Ralf-Detlef Kutsche
1991 conf
Open Distributed Processing
Horst Hansen, Ralf-Detlef Kutsche, Joachim Steffens
1989 book
Grundlagen des maschinellen Beweisens - eine Einführung für Informatiker und Mathematiker.
Dieter Hofbauer, Ralf-Detlef Kutsche
1988 conf
ALP
Dieter Hofbauer, Ralf-Detlef Kutsche
1988 conf
ADT
Dieter Hofbauer, Ralf-Detlef Kutsche
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)