Hal Berghel

191 papers B 1Misc 10Journal 171Unranked 8
YearRankTypeTitle / Venue / Authors
2026 J jnl
Computer
Hal Berghel
2026 J jnl
Computer
Hal Berghel
2025 J jnl
Computer
Hal Berghel
2025 J jnl
Computer
Hal Berghel
2025 J jnl
Computer
Hal Berghel
2025 J jnl
Computer
Hal Berghel
2025 J jnl
Computer
Hal Berghel
2024 J jnl
Computer
Hal Berghel
2024 J jnl
Computer
Hal Berghel
2024 J jnl
Computer
Hal Berghel
2024 J jnl
Computer
Hal Berghel
2024 J jnl
Computer
John Leslie King, Hal Berghel, Phillip Glen Armour, Robert N. Charette
2024 J jnl
Computer
Hal Berghel
2023 J jnl
Computer
Hal Berghel
2023 J jnl
Computer
Hal Berghel
2023 J jnl
Computer
Hal Berghel
2023 J jnl
Computer
Hal Berghel
2023 J jnl
Computer
Hal Berghel
2023 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Hal Berghel
2022 J jnl
Computer
Phillip Glen Armour, Hal Berghel, Robert N. Charette, John Leslie King
2021 J jnl
Computer
Hal Berghel
2021 J jnl
Computer
Achintya K. Bhowmik, David A. Fabry, Phillip G. Armour, Hal Berghel, Robert N. Charette, John L. King
2021 J jnl
Computer
Hal Berghel
2020 J jnl
Computer
Hal Berghel
2020 J jnl
Computer
Hal Berghel
2020 J jnl
Computer
Hal Berghel, Robert N. Charette, Edward G. Happ, John Leslie King
2020 J jnl
Computer
Hal Berghel
2020 J jnl
Computer
Hal Berghel
2020 J jnl
Computer
Hal Berghel
2019 J jnl
Computer
Hal Berghel
2019 J jnl
Computer
Hal Berghel
2019 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel, Daniel Berleant
2018 J jnl
Computer
Hal Berghel
2018 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2017 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2016 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2015 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2014 J jnl
Computer
Hal Berghel
2013 J jnl
Computer
Hal Berghel
2013 J jnl
Computer
Hal Berghel
2013 J jnl
Computer
Hal Berghel
2013 J jnl
Computer
Hal Berghel
2013 J jnl
Computer
Hal Berghel
2013 J jnl
Computer
Hal Berghel
2012 J jnl
Computer
Hal Berghel
2012 J jnl
Computer
Hal Berghel
2012 J jnl
Computer
Hal Berghel
2012 J jnl
Computer
Hal Berghel
2012 J jnl
Computer
Hal Berghel
2012 J jnl
Computer
Hal Berghel
2011 J jnl
J. Inf. Process. Syst.
Amit Grover, Hal Berghel
2011 J jnl
Adv. Comput.
Amit Grover, Hal Berghel, Dennis Cobb
2010 J jnl
Adv. Comput.
Amit Grover, Paul Braeckel, Kevin Lindgren, Hal Berghel, Dennis Cobb
2008 J jnl
Commun. ACM
Hal Berghel
2008 J jnl
Adv. Comput.
Hal Berghel, David Hoelzer, Michael Sthultz
2008 J jnl
Commun. ACM
Hal Berghel
2007 J jnl
Commun. ACM
Hal Berghel
2007 J jnl
Commun. ACM
Hal Berghel
2007 J jnl
Commun. ACM
Hal Berghel
2007 J jnl
Adv. Comput.
Hal Berghel, James Carpinter, Ju-Yeon Jo
2006 J jnl
Commun. ACM
Hal Berghel, David Hoelzer
2006 J jnl
Commun. ACM
Hal Berghel
2006 J jnl
Commun. ACM
Hal Berghel
2006 J jnl
Adv. Comput.
Michael Sthultz, Jacob Uecker, Hal Berghel
2005 J jnl
Adv. Comput.
John V. Harrison, Hal Berghel
2005 J jnl
Commun. ACM
Hal Berghel, David Hoelzer
2005 J jnl
Commun. ACM
Hal Berghel
2005 J jnl
Commun. ACM
Hal Berghel, Jacob Uecker
2004 J jnl
Commun. ACM
Hal Berghel, David L. Sallach
2004 J jnl
Commun. ACM
Hal Berghel, Natasa Brajkovska
2004 J jnl
Commun. ACM
Hal Berghel
2004 J jnl
Commun. ACM
Hal Berghel, Jacob Uecker
2003 J jnl
Commun. ACM
Hal Berghel, Kim Womack
2003 J jnl
Commun. ACM
Hal Berghel
2003 J jnl
Commun. ACM
Hal Berghel
2002 J jnl
Commun. ACM
Hal Berghel
2002 J jnl
Commun. ACM
Hal Berghel
2001 J jnl
Commun. ACM
Hal Berghel
2001 Misc conf
SAC
Hal Berghel
2001 J jnl
Commun. ACM
Hal Berghel
2001 J jnl
Computer
Hal Berghel
2001 J jnl
Commun. ACM
Hal Berghel
2001 J jnl
Commun. ACM
Hal Berghel
2000 J jnl
XRDS
Hal Berghel
2000 J jnl
Commun. ACM
Hal Berghel
2000 J jnl
Commun. ACM
Hal Berghel
2000 J jnl
Commun. ACM
Hal Berghel
1999 J jnl
J. Am. Soc. Inf. Sci.
Hal Berghel, Daniel Berleant, Thomas Foy, Marcus McGuire
1999 J jnl
Commun. ACM
Hal Berghel
1999 J jnl
Commun. ACM
Hal Berghel
1999 J jnl
Adv. Comput.
Hal Berghel, Douglas Blank
1999 J jnl
Commun. ACM
Hal Berghel
1998 J jnl
Commun. ACM
Hal Berghel
1998 J jnl
Commun. ACM
Hal Berghel
1997 J jnl
SIGCAS Comput. Soc.
Hal Berghel
1997 J jnl
Commun. ACM
Hal Berghel
1997 J jnl
Commun. ACM
Hal Berghel
1997 J jnl
Commun. ACM
Hal Berghel
1997 J jnl
XRDS
Hal Berghel
1997 J jnl
Commun. ACM
Hal Berghel
1997 B conf
ITiCSE
Hal Berghel, Cathleen A. Norris, Elliot Soloway, Harriet G. Taylor, Joe Turner
1996 J jnl
ACM Trans. Inf. Syst.
Hal Berghel, David Roach
1996 J jnl
Commun. ACM
Hal Berghel
1996 J jnl
Commun. ACM
Hal Berghel
1996 J jnl
Commun. ACM
Hal Berghel
1996 J jnl
Commun. ACM
Hal Berghel
1995 Misc conf
SAC
Hal Berghel
1995 J jnl
Commun. ACM
Hal Berghel
1995 J jnl
Computer
Hal Berghel
1994 J jnl
Interactions
Hal Berghel
1994 Misc ed.
SAC
Hal Berghel, Terry Hlengl, Joseph E. Urban
1993 Misc conf
SAC
Gordon Beavers, Hal Berghel
1993 Misc ed.
SAC
Ed Deaton, K. M. George, Hal Berghel, George E. Hedrick
1992 Misc conf
SAC
Hal Berghel, David Roach, George Balogh, Carroll Hyatt
1992 Misc conf
SAC
L. J. Spring, G. H. Harris, John J. H. Forster, Hal Berghel
1992 Misc conf
SAC
David Roach, Hal Berghel
1992 Misc conf
SAC
G. H. Harris, David Roach, P. D. Smith, Hal Berghel
1992 Misc ed.
SAC
Hal Berghel, Ed Deaton, George E. Hedrick, David Roach, Roger L. Wainwright
1990 J jnl
Comput. J.
Hal Berghel, Richard Rankin
1990 conf
SIGSMALL/PC Symposium
Hal Berghel, Richard Rankin, Farrukh Burney
1990 conf
SIGDOC
David Roach, Hal Berghel, John R. Talburt
1990 conf
SIGDOC
Hal Berghel, David Roach
1990 conf
SIGSMALL/PC Symposium
Richard Rankin, Hal Berghel, T. Xu
1990 ed.
SIGSMALL/PC Symposium
Hal Berghel, Elizabeth A. Unger, Richard Rankin
1990 conf
SIGSMALL/PC Symposium
David Roach, Hal Berghel
1989 J jnl
Comput. J.
Hal Berghel, C. Yi
1988 J jnl
ACM SIGPLAN Notices
Hal Berghel, Richard Rankin, Sanjiv K. Bhatia
1988 conf
SIGSMALL/PC
Hal Berghel, Cecily Andreu
1987 J jnl
Inf. Process. Manag.
Hal Berghel
1987 J jnl
Comput. J.
Hal Berghel
1986 J jnl
ACM SIGPLAN Notices
John Weeks, Hal Berghel
1986 conf
SIGSMALL
Hal Berghel, Gregg Stubbendieck, Eric Traudt
1986 J jnl
ACM SIGPLAN Notices
Hal Berghel, Eric Traudt
1985 J jnl
Data Base
Hal Berghel
1984 J jnl
ACM SIGPLAN Notices
Hal Berghel, David L. Sallach
1984 J jnl
Commun. ACM
Gene Dallaire, Fortney H. Stark, Hal Berghel
1983 J jnl
SIGCAS Comput. Soc.
Hal Berghel, David L. Sallach
1982 conf
SIGSMALL
Hal Berghel
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