Malay K. Ganai

65 papers A* 15A 9B 10C 3Misc 3Journal 8Unranked 14
YearRankTypeTitle / Venue / Authors
2014 conf
VECPAR
Yu Lin, Franjo Ivancic, Pallavi Joshi, Gogul Balakrishnan, Malay K. Ganai, Aarti Gupta
2014 ed.
DIFTS@FMCAD
Malay K. Ganai, Alper Sen
2014 conf
SoCC
Kaituo Li, Pallavi Joshi, Aarti Gupta, Malay K. Ganai
2013 A* conf
ASE
Malay K. Ganai
2013 conf
TRIOS@SOSP
Pallavi Joshi, Malay K. Ganai, Gogul Balakrishnan, Aarti Gupta, Nadia Papakonstantinou
2012 conf
SIGSOFT FSE
Malay K. Ganai, Dongyoon Lee, Aarti Gupta
2012 B conf
RV
Malay K. Ganai
2012 ed.
DIFTS@FMCAD
Malay K. Ganai, Armin Biere
2011 A* conf
ASE
Malay K. Ganai, Nipun Arora, Chao Wang, Aarti Gupta, Gogul Balakrishnan
2011 B conf
RV
Chao Wang, Malay K. Ganai
2011 A* conf
ASE
Malay K. Ganai
2011 J jnl
Formal Aspects Comput.
Chao Wang, Sudipta Kundu, Rhishikesh Limaye, Malay K. Ganai, Aarti Gupta
2010 A* conf
CAV
Sudipta Kundu, Malay K. Ganai, Chao Wang
2010 A conf
ICCAD
Malay K. Ganai, Chao Wang, Weihong Li
2010 B conf
FMCAD
Sicun Gao, Malay K. Ganai, Franjo Ivancic, Aarti Gupta, Sriram Sankaranarayanan, Edmund M. Clarke
2010 B conf
RV
Malay K. Ganai, Chao Wang
2010 C conf
MEMOCODE
Franjo Ivancic, Malay K. Ganai, Sriram Sankaranarayanan, Aarti Gupta
2010 B conf
FMCAD
Malay K. Ganai
2010 B conf
FMCAD
Gogul Balakrishnan, Malay K. Ganai, Aarti Gupta, Franjo Ivancic, Vineet Kahlon, Weihong Li, Naoto Maeda, Nadia Papakonstantinou, Sriram Sankaranarayanan, Nishant Sinha, Chao Wang
2010 A conf
TACAS
Chao Wang, Rhishikesh Limaye, Malay K. Ganai, Aarti Gupta
2009 C conf
MEMOCODE
Malay K. Ganai, Weihong Li
2009 B conf
FMCAD
Malay K. Ganai, Franjo Ivancic
2009 conf
SPIN
Malay K. Ganai, Sudipta Kundu
2009 B conf
FM
Chao Wang, Sudipta Kundu, Malay K. Ganai, Aarti Gupta
2008 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Aleksandr Zaks, Zijiang Yang, Ilya Shlyakhter, Franjo Ivancic, Srihari Cadambi, Malay K. Ganai, Aarti Gupta, Pranav Ashar
2008 A conf
DATE
Malay K. Ganai, Aarti Gupta
2008 conf
Haifa Verification Conference
Malay K. Ganai
2008 conf
SPIN
Malay K. Ganai, Aarti Gupta
2008 J jnl
Theor. Comput. Sci.
Franjo Ivancic, Zijiang Yang, Malay K. Ganai, Aarti Gupta, Pranav Ashar
2008 A conf
ICCAD
Chao Wang, Malay K. Ganai, Shuvendu K. Lahiri, Daniel Kroening
2008 B conf
SEFM
Gogul Balakrishnan, Malay K. Ganai
2008 A* conf
DAC
Sudipta Kundu, Malay K. Ganai, Rajesh Gupta
2008 A* conf
DAC
Malay K. Ganai, Aarti Gupta
2008 conf
Haifa Verification Conference
Malay K. Ganai, Weihong Li
2007 conf
ASP-DAC
Malay K. Ganai, Aarti Gupta
2007 book
Malay K. Ganai, Aarti Gupta
2007 J jnl
J. Satisf. Boolean Model. Comput.
Malay K. Ganai, Muralidhar Talupur, Aarti Gupta
2007 Misc conf
VLSI Design
Malay K. Ganai, Akira Mukaiyama, Aarti Gupta, Kazutoshi Wakabayashi
2007 J jnl
CoRR
Malay K. Ganai, Aarti Gupta, Pranav Ashar
2006 A conf
ICCAD
Malay K. Ganai, Aarti Gupta
2006 J jnl
Int. J. Softw. Tools Technol. Transf.
Malay K. Ganai, Aarti Gupta, Zijiang Yang, Pranav Ashar
2006 A* conf
DAC
Chao Wang, Aarti Gupta, Malay K. Ganai
2006 conf
SFM
Aarti Gupta, Malay K. Ganai, Chao Wang
2005 A* conf
DAC
Malay K. Ganai, Aarti Gupta, Pranav Ashar
2005 B conf
LPAR
Chao Wang, Franjo Ivancic, Malay K. Ganai, Aarti Gupta
2005 A* conf
CAV
Franjo Ivancic, Zijiang Yang, Malay K. Ganai, Aarti Gupta, Ilya Shlyakhter, Pranav Ashar
2005 Misc conf
VLSI Design
Aarti Gupta, Malay K. Ganai, Pranav Ashar
2005 A conf
TACAS
Himanshu Jain, Franjo Ivancic, Aarti Gupta, Malay K. Ganai
2005 C conf
ICCD
Franjo Ivancic, Ilya Shlyakhter, Aarti Gupta, Malay K. Ganai, Vineet Kahlon, Chao Wang, Zijiang Yang
2005 A conf
DATE
Malay K. Ganai, Aarti Gupta, Pranav Ashar
2004 A* conf
CAV
Malay K. Ganai, Aarti Gupta, Pranav Ashar
2004 conf
ISoLA (Preliminary proceedings)
Pranav Ashar, Malay K. Ganai, Aarti Gupta, Franjo Ivancic, Zijiang Yang
2004 A conf
ICCAD
Malay K. Ganai, Aarti Gupta, Pranav Ashar
2003 A* conf
CAV
Aarti Gupta, Malay K. Ganai, Chao Wang, Zijiang Yang, Pranav Ashar
2003 conf
CHARME
Malay K. Ganai, Aarti Gupta, Zijiang Yang, Pranav Ashar
2003 A conf
ICCAD
Aarti Gupta, Malay K. Ganai, Zijiang Yang, Pranav Ashar
2003 A* conf
DAC
Aarti Gupta, Malay K. Ganai, Chao Wang, Zijiang Yang, Pranav Ashar
2002 A* conf
DAC
Malay K. Ganai, Pranav Ashar, Aarti Gupta, Lintao Zhang, Sharad Malik
2002 conf
ASP-DAC/VLSI Design
Malay K. Ganai, Adnan Aziz
2002 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Andreas Kuehlmann, Viresh Paruthi, Florian Krohm, Malay K. Ganai
2001 A* conf
DAC
Andreas Kuehlmann, Malay K. Ganai, Viresh Paruthi
2001 conf
ACM Great Lakes Symposium on VLSI
Malay K. Ganai, Adnan Aziz
2001 J jnl
J. Electron. Test.
Malay K. Ganai, Praveen Yalagandula, Adnan Aziz, Andreas Kuehlmann, Vigyan Singhal
1999 A* conf
DAC
Malay K. Ganai, Adnan Aziz, Andreas Kuehlmann
1999 Misc conf
VLSI Design
Tai-Hung Liu, Malay K. Ganai, Adnan Aziz, Jeffrey L. Burns
redb/extractors/decompiler/bninja/analysis/medium_level.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level.py python
import time

from binaryninja import (
    MediumLevelILOperation as MLIL_OP,
)

try:
    from ..function_type import FunctionTypeAnalysis
    from ..similarity.minhasher import MinHasher, TokenKind
    from ..utils.hashes import calculate_sha256, calculate_tlsh
    from .medium_level_normalization import MediumLevelNormalization
except ImportError:
    from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import MediumLevelNormalization
    from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh


_MLIL_CALL_OPS = (
    MLIL_OP.MLIL_CALL,
    MLIL_OP.MLIL_CALL_SSA,
    MLIL_OP.MLIL_CALL_UNTYPED,
    MLIL_OP.MLIL_CALL_UNTYPED_SSA,
    MLIL_OP.MLIL_TAILCALL,
    MLIL_OP.MLIL_TAILCALL_SSA,
    MLIL_OP.MLIL_TAILCALL_UNTYPED,
    MLIL_OP.MLIL_TAILCALL_UNTYPED_SSA,
)

_MLIL_CONTROL_FLOW_OPS = (
    MLIL_OP.MLIL_IF,
    MLIL_OP.MLIL_GOTO,
    MLIL_OP.MLIL_JUMP,
    MLIL_OP.MLIL_JUMP_TO,
    MLIL_OP.MLIL_RET,
    MLIL_OP.MLIL_RET_HINT,
    MLIL_OP.MLIL_NORET,
) + _MLIL_CALL_OPS


class MediumLevelAnalysis:
    def __init__(self, function, bv, logger):
        self.function = function
        self.name = function.name
        self.start = function.start
        self.mlil_func = function.mlil
        self.bv = bv
        self.logger = logger
        self.errors = []

    def log_error(self, message, function_name, address, exception=None, error_location="unknown"):
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def _collect_mlil_skeleton_and_typed(self):
        mlil = self.mlil_func
        if not mlil:
            return [], [], [], []

        start = self.start
        norm = MediumLevelNormalization()

        skeleton = []
        skeleton_with_addr = []
        typed = []
        typed_with_addr = []

        for il in mlil.instructions:
            skel_norm = norm.normalize_instruction_all_levels(il)
            typed_norm = norm.normalize_instr_with_operands(il)

            skeleton.append(skel_norm)
            typed.append(typed_norm)

            offset = il.address - start
            if offset < 0:
                offset = 0

            skeleton_with_addr.append((offset, skel_norm))
            typed_with_addr.append((offset, typed_norm))

        return skeleton, skeleton_with_addr, typed, typed_with_addr

    def analyze(self):
        (
            instr_skeleton,
            body_mlil_skeleton_vector,
            instr_typed,
            body_mlil_typed_vector,
        ) = self._collect_mlil_skeleton_and_typed()

        instr_skeleton_str = str(instr_skeleton)
        sha256_skeleton = calculate_sha256(instr_skeleton_str)
        tlsh_skeleton = calculate_tlsh(instr_skeleton_str)

        instr_typed_str = str(instr_typed)
        sha256_typed = calculate_sha256(instr_typed_str)
        tlsh_typed = calculate_tlsh(instr_typed_str)

        seed = 0xdeadbeef
        minhash_mlil_skeleton = MinHasher(seed, self.mlil_func, TokenKind.MLIL).calculateMinHash()
        minhash_mlil_typed = MinHasher(seed, self.mlil_func, TokenKind.TYPED_MLIL).calculateMinHash()

        medium_level_json = {
            "function_address": self.start,
            "body_mlil_skeleton_vector": body_mlil_skeleton_vector,
            "sha256_mlil_skeleton": sha256_skeleton,
            "tlsh_mlil_skeleton": tlsh_skeleton,
            "minhash_mlil_skeleton": minhash_mlil_skeleton,
            "body_mlil_typed_vector": body_mlil_typed_vector,
            "sha256_mlil_typed": sha256_typed,
            "tlsh_mlil_typed": tlsh_typed,
            "minhash_mlil_typed": minhash_mlil_typed,
        }

        return medium_level_json, self.errors