Jakob Mund

17 papers A 3B 1C 3Journal 5Unranked 3
YearRankTypeTitle / Venue / Authors
2025 conf
SIGMOD Conference Companion
Martin Grund, Stefania Leone, Herman Van Hövell, Sven Wagner-Boysen, Sebastian Hillig, Hyukjin Kwon, David Lewis, Jakob Mund, Polo-Francois Poli, Lionel Montrieux, Othon Crelier, Xiao Li, Reynold Xin, Matei Zaharia, Michalis Petropoulos, Thanos Papathanasiou
2019 J jnl
Softw. Syst. Model.
Daniel Méndez Fernández, Wolfgang Böhm, Andreas Vogelsang, Jakob Mund, Manfred Broy, Marco Kuhrmann, Thorsten Weyer
2019 ch.
Managed Software Evolution
Bernhard Beckert, Jakob Mund, Mattias Ulbrich, Alexander Weigl
2018 J jnl
CoRR
Daniel Méndez Fernández, Wolfgang Böhm, Andreas Vogelsang, Jakob Mund, Manfred Broy, Marco Kuhrmann, Thorsten Weyer
2018 J jnl
Autom.
Jakob Mund, Safa Bougouffa, Iman Badr, Birgit Vogel-Heuser
2017 A conf
RE
Alistair Mavin, Philip Wilkinson, Sabine Teufl, Henning Femmer, Jonas Eckhardt, Jakob Mund
2017 J jnl
CoRR
Jakob Mund, Henning Femmer, Daniel Méndez Fernández, Jonas Eckhardt
2017 C conf
MEMOCODE
Jakob Mund, Maximilian Junker, Safa Bougouffa, Suhyun Cha, Birgit Vogel-Heuser
2015 C conf
INDIN
Birgit Vogel-Heuser, Jens Folmer, Thomas Aicher, Jakob Mund, Sebastian Rehberger
2015 A conf
ESEM
Jakob Mund, Daniel Méndez Fernández, Henning Femmer, Jonas Eckhardt
2015 conf
RET@ICSE
Henning Femmer, Jakob Mund, Daniel Méndez Fernández
2015 C conf
INDIN
Birgit Vogel-Heuser, Jakob Mund, Matthias Kowal, Christoph Legat, Jens Folmer, Sabine Teufl, Ina Schaefer
2014 conf
SAM
Georg Hackenberg, Alarico Campetelli, Christoph Legat, Jakob Mund, Sabine Teufl, Birgit Vogel-Heuser
2014 A conf
EASE
Daniel Méndez Fernández, Jakob Mund, Henning Femmer, Antonio Vetrò
2014 J jnl
Autom.
Christoph Legat, Jakob Mund, Alarico Campetelli, Georg Hackenberg, Jens Folmer, Daniel Schütz, Manfred Broy, Birgit Vogel-Heuser
2013 B conf
ATVA
Jakob Mund, Ralf Huuck, Ansgar Fehnker, Cyrille Artho
2012 ch.
Model-Based Engineering of Embedded Systems
Sebastian Eder, Jakob Mund, Andreas Vogelsang
redb/extractors/decompiler/_archive/ghidra-test.py
← Index redb/extractors/decompiler/_archive/ghidra-test.py python
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import sys
import time


def run_command(cmd, env=None):
    try:
        print(f"Starting command: {' '.join(cmd)}")
        start_time = time.time()
        process = subprocess.Popen(
            cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
        )

        while True:
            output = process.stdout.readline()
            if output:
                print(output.strip())
            if process.poll() is not None:
                break

        stdout, stderr = process.communicate()
        end_time = time.time()

        print(f"Command finished. Execution time: {end_time - start_time:.2f} seconds")
        print(f"Return code: {process.returncode}")

        if process.returncode != 0:
            print(f"Error output:\n{stderr}")
            return None
        return stdout
    except Exception as e:
        print(f"Error running command {' '.join(cmd)}: {e}")
        return None


def analyze_binary(ghidra_path, binary_path, java_script_path):
    print(f"Ghidra path: {ghidra_path}")
    print(f"Binary path: {binary_path}")
    print(f"Java script path: {java_script_path}")

    # Check if Java script exists
    if not os.path.exists(java_script_path):
        print(f"Error: Java script not found at {java_script_path}")
        return None

    # Set up environment variables
    env = os.environ.copy()
    java_home = "/usr/lib/jvm/java-17-openjdk-amd64"  # Adjust this path if needed
    env["JAVA_HOME"] = java_home
    env["PATH"] = f"{java_home}/bin:{env['PATH']}"
    env["LD_LIBRARY_PATH"] = f"{java_home}/lib:{env.get('LD_LIBRARY_PATH', '')}"

    # Print environment variables for debugging
    print(f"JAVA_HOME: {env['JAVA_HOME']}")
    print(f"PATH: {env['PATH']}")
    print(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

    # Check Ghidra installation
    analyzeHeadless_path = f"{ghidra_path}/support/analyzeHeadless"
    print(f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}")

    print(f"Binary file exists: {os.path.exists(binary_path)}")

    # Check Java
    java_version = run_command(["java", "-version"], env=env)
    print(f"Java version: {java_version}")

    # Create a temporary project directory
    project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
    os.makedirs(project_path, exist_ok=True)
    print(f"Created temporary project path: {project_path}")
    output_file = ""

    try:
        # Run Ghidra's headless analyzer
        analyze_cmd = [
            analyzeHeadless_path,
            project_path,
            "TempProject",
            "-import",
            binary_path,
            "-postScript",
            java_script_path,
            "-deleteProject",
        ]

        result = run_command(analyze_cmd, env=env)
        if result is None:
            return None

        # Read the output JSON file
        output_file = "ghidra_output.json"
        if os.path.exists(output_file):
            with open(output_file, "r") as f:
                functions = json.load(f)
            return functions
        else:
            print(
                f"Output file {output_file} not found. Ghidra analysis may have failed."
            )
            # List files in the current directory
            print("Files in the current directory:")
            print("\n".join(os.listdir(".")))
            return None
    finally:
        # Clean up
        if os.path.exists(output_file):
            os.remove(output_file)
        if os.path.exists(project_path):
            shutil.rmtree(project_path)


# Example usage
if __name__ == "__main__":
    # if len(sys.argv) != 4:
    #     print("Usage: python script.py <ghidra_path> <binary_path> <java_script_path>")
    #     sys.exit(1)

    # ghidra_path = sys.argv[1]
    # binary_path = sys.argv[2]
    # java_script_path = sys.argv[3]

    ghidra_path = "/opt/ghidra"
    binary_path = "/home/p4c0/dev/redb/test_files/hello"
    java_script_path = (
        "/opt/ghidra/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
    )

    functions = analyze_binary(ghidra_path, binary_path, java_script_path)

    if functions:
        print(f"Extracted functions from {binary_path}:")
        for func in functions:
            print(f"\nFunction: {func['name']}")
            print(f"Address: {func['address']}")
            print(f"Decompiled code:\n{func['decompiled']}")
    else:
        print("Failed to extract functions.")