Ralf Reulke

45 papers A 3B 1C 9Misc 2Journal 5Unranked 25
YearRankTypeTitle / Venue / Authors
2023 J jnl
Multim. Tools Appl.
Wenjia Ding, Huyin Zhang, Ralf Reulke, Yulin Wang
2022 J jnl
Pattern Recognit. Lett.
Wenjia Ding, Huyin Zhang, Ralf Reulke, Yulin Wang
2019 C conf
PSIVT
Christian Hümmer, Dominik Rueß, Jochen Rueß, Niklas Deckers, Arndt Christian Hofmann, Sven M. Bergmann, Ralf Reulke
2019 Misc conf
IVCNZ
Niklas Deckers, Ralf Reulke
2019 C conf
PSIVT
Dominik Rueß, Jochen Rueß, Christian Hümmer, Niklas Deckers, Vitaliy Migal, Kathrin Kienapfel, Anne Wieckert, Dirk Barnewitz, Ralf Reulke
2019 conf
PSIVT Workshops
Henry Meißner, Michael Cramer, Ralf Reulke
2019 conf
ACPR Workshops
Winfried Halle, Christian Fischer, Thomas Terzibaschian, Adina Zell, Ralf Reulke
2019 conf
ACPR Workshops
Ralf Reulke, Michael P. Skegg, Rüdiger Hohn
2019 J jnl
Sensors
David Krutz, Rupert Müller, Uwe Knodt, Burghardt Günther, Ingo Walter, Ilse Sebastian, Thomas Säuberlich, Ralf Reulke, Emiliano Carmona, Andreas Eckardt, Holger Venus, Christian Fischer, Bernd Zender, Simone Arloth, Matthias Lieder, Michael Neidhardt, Ute Grote, Friedrich Schrandt, Samuele Gelmi, Andreas Wojtkowiak
2018 B conf
AVSS
Ralf Reulke, Dominik Rueß, Niklas Deckers, Dirk Barnewitz, Anne Wieckert, Kathrin Kienapfel
2018 Misc conf
IVCNZ
Agnieszka Soszynska, Malte Muller-Rowold, Ralf Reulke
2017 conf
PSIVT Workshops
David Krutz, Holger Venus, Andreas Eckardt, Ingo Walter, Ilse Sebastian, Ralf Reulke, Burghardt Günther, Bernd Zender, Simone Arloth, Christian Williges, Matthias Lieder, Michael Neidhardt, Ute Grote, Friedrich Schrandt, Andreas Wojtkowiak
2017 conf
Earth Observing Systems
Henrique Candeias, Xavier Gnata, Maximilian Harlander, Markus Hermsen, Rüdiger Hohn, Stefan Riedl, Michael P. Skegg, Christian Williges, Ralf Reulke
2017 conf
Earth Observing Systems
Markus Hermsen, Rüdiger Hohn, Michael P. Skegg, Charles Woffinden, Ralf Reulke
2017 conf
Earth Observing Systems
Rüdiger Hohn, Michael P. Skegg, Markus Hermsen, Jürgen Hinger, Christian Williges, Ralf Reulke
2017 conf
Earth Observing Systems
Michael P. Skegg, Markus Hermsen, Rüdiger Hohn, Christian Williges, Charles Woffinden, Yves Levillain, Ralf Reulke
2017 conf
Earth Observing Systems
Christian Williges, Mathias Uhlig, Stefan Hilbert, Hannes Rossmann, Kevin Buchwinkler, Steffen Babben, Ilse Sebastian, Rüdiger Hohn, Ralf Reulke
2017 J jnl
CoRR
Dominik Rueß, Konstantinos Amplianitis, Niklas Deckers, Michele Adduci, Kristian Manthey, Ralf Reulke
2016 conf
VISIGRAPP (4: VISAPP)
Konstantinos Amplianitis, Ronny Hänsch, Ralf Reulke
2015 J jnl
Comput. Geosci.
Gregoire H. G. Kerr, Christian Fischer, Ralf Reulke
2015 conf
TSP
Mohamed Tahoun, Abd El Rahman Shabayek, Aboul Ella Hassanien, Ralf Reulke
2015 C conf
IGARSS
Gregoire H. G. Kerr, Christian Fischer, Ralf Reulke
2015 conf
VISAPP (3)
Konstantinos Amplianitis, Michele Adduci, Ralf Reulke
2015 conf
PSIVT Workshops
Horst Schwarzer, Andreas Eckardt, Ralf Reulke
2014 conf
IEEE Conf. on Intelligent Systems (2)
Mohamed Tahoun, Abd El Rahman Shabayek, Ralf Reulke, Aboul Ella Hassanien
2013 A conf
ICST
Ralf Reulke, Andreas Eckardt
2013 A conf
ICST
Andreas Eckardt, Ralf Reulke
2013 A conf
ICST
Ralf Reulke, Gianluca Giaquinto, Marcello Maria Giovenco, Dominik Rueß
2011 conf
ICDSC
Dominik Rueß, Kristian Manthey, Ralf Reulke
2011 C conf
IWCIA
Dominik Rueß, Ralf Reulke
2011 conf
Theoretical Foundations of Computer Vision
Daniel Kondermann, Steffen Abraham, Gabriel J. Brostow, Wolfgang Förstner, Stefan Gehrig, Atsushi Imiya, Bernd Jähne, Felix Klose, Marcus A. Magnor, Helmut Mayer, Rudolf Mester, Tomás Pajdla, Ralf Reulke, Henning Zimmer
2011 conf
Theoretical Foundations of Computer Vision
Ralf Reulke, Dominik Rueß, Kristian Manthey, Andreas Luber
2010 conf
ACCV Workshops (2)
Mathias Haberjahn, Ralf Reulke
2008 conf
VISAPP (2)
Ralf Reulke, Sascha Bauer, Thomas Döring, Robert Spangenberg
2008 conf
RobVis
Ralf Reulke, Frederik Meysel, Sascha Bauer
2006 C ed.
IWCIA
Ralf Reulke, Ulrich Eckardt, Boris Flach, Uwe Knauer, Konrad Polthier
2005 C conf
CAIP
Ralf Reulke, Georgy L. Gimel'farb, Susanne Becker
2004 conf
Imaging Beyond the Pin-hole Camera. 12th Seminar on Theoretical Foundations of Computer Vision
Ralf Reulke, Aloysius Wehr, Denis Griesbach
2004 C conf
IWCIA
Ralf Reulke, Norbert Haala
2003 C conf
CAIP
Reinhard Klette, Georgy L. Gimel'farb, Shou-Kang Wei, Fay Huang, Karsten Scheibe, Martin Scheele, Anko Börner, Ralf Reulke
2001 conf
RobVis
Karsten Scheibe, Hartmut Korsitzky, Ralf Reulke, Martin Scheele, Michael Solbrig
2001 conf
RobVis
Anko Börner, Ralf Reulke
2000 conf
Theoretical Foundations of Computer Vision
Ralf Reulke
1997 C conf
CAIP
Ralf Reulke
1996 conf
EUSIPCO
Ralf Reulke, Herbert Jahn
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)