Carita Paradis

24 papers C 1Misc 1Journal 8Unranked 14
YearRankTypeTitle / Venue / Authors
2022 J jnl
CoRR
Pantea Haghighatkhah, Mennatallah El-Assady, Jean-Daniel Fekete, Narges Mahyar, Carita Paradis, Vasiliki Simaki, Bettina Speckmann
2020 J jnl
Int. J. Artif. Intell. Tools
Iosif Mporas, Vasiliki Simaki, Carita Paradis, Andreas Kerren, Michael Paraskevas
2020 J jnl
J. Vis.
Kostiantyn Kucher, Rafael Messias Martins, Carita Paradis, Andreas Kerren
2019 J jnl
Cogn. Sci.
Sara Farshchi, Richard Andersson, Joost van de Weijer, Carita Paradis
2018 conf
SETN
Vasiliki Simaki, Panagiotis Simakis, Carita Paradis, Andreas Kerren
2018 conf
VISIGRAPP (3: IVAPP)
Kostiantyn Kucher, Carita Paradis, Andreas Kerren
2018 J jnl
Comput. Graph. Forum
Kostiantyn Kucher, Carita Paradis, Andreas Kerren
2018 conf
EuroVis (Posters)
Kostiantyn Kucher, Carita Paradis, Andreas Kerren
2017 J jnl
ACM Trans. Interact. Intell. Syst.
Kostiantyn Kucher, Carita Paradis, Magnus Sahlgren, Andreas Kerren
2017 conf
SPECOM
Maria Skeppstedt, Vasiliki Simaki, Carita Paradis, Andreas Kerren
2017 Misc conf
RANLP
Vasiliki Simaki, Panagiotis Simakis, Carita Paradis, Andreas Kerren
2017 conf
SPECOM
Vasiliki Simaki, Carita Paradis, Andreas Kerren
2016 conf
PEOPLES@COLING
Maria Skeppstedt, Magnus Sahlgren, Carita Paradis, Andreas Kerren
2016 conf
SMBM
Maria Skeppstedt, Carita Paradis, Andreas Kerren
2016 J jnl
J. Lang. Technol. Comput. Linguistics
Maria Skeppstedt, Carita Paradis, Andreas Kerren
2016 conf
ArgMining@ACL
Maria Skeppstedt, Magnus Sahlgren, Carita Paradis, Andreas Kerren
2016 conf
EuroVis (Posters)
Kostiantyn Kucher, Andreas Kerren, Carita Paradis, Magnus Sahlgren
2016 J jnl
Inf. Vis.
Kostiantyn Kucher, Teri Schamp-Bjerede, Andreas Kerren, Carita Paradis, Magnus Sahlgren
2015 conf
WASSA@EMNLP
Maria Skeppstedt, Teri Schamp-Bjerede, Magnus Sahlgren, Carita Paradis, Andreas Kerren
2015 conf
Louhi@EMNLP
Alyaa Alfalahi, Maria Skeppstedt, Rickard Ahlbom, Roza Baskalayci, Aron Henriksson, Lars Asker, Carita Paradis, Andreas Kerren
2015 conf
NetWordS
Debela Tesfaye, Carita Paradis
2014 conf
CLEF (Working Notes)
Afshin Rahimi, Magnus Sahlgren, Andreas Kerren, Carita Paradis
2014 conf
IEEE VAST
Kostiantyn Kucher, Andreas Kerren, Carita Paradis, Magnus Sahlgren
2011 C conf
IV
Andreas Kerren, Mimi Prangova, Carita Paradis
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.")