Nadia Boukhelifa

37 papers A* 2B 1Journal 16Unranked 16
YearRankTypeTitle / Venue / Authors
2025 conf
CHI Extended Abstracts
Omi H. Johnson, Melanie Munch, Kamal Kansou, Cédric Baudrit, Anastasia Bezerianos, Nadia Boukhelifa
2025 conf
CHI Extended Abstracts
Briggs Twitchell, George Katsirelos, Anastasia Bezerianos, Nadia Boukhelifa
2024 conf
DCAI (1)
Irene Martínez-Menéndez, Juan C. Acosta-Pavas, David Camilo Corrales, Susana María Alonso Villela, Balkiss Bouhaouala-Zahar, Georgios K. Georgakilas, Konstantinos Mexis, Stefanos Xenios, Theodore Dalamagas, Antonis Kokosis, Michael O'donohue, Luc Fillaudeau, Nadia Boukhelifa, Alberto Tonda, César Arturo Aceves-Lara
2024 conf
CHI Extended Abstracts
Thibault Raffaillac, Nadia Boukhelifa, Emilie Crouzat, Fabien Stark, Jean-Pierre Müller, Jacques Lasseur
2023 conf
IHM (Adjunct)
Thibault Raffaillac, Nadia Boukhelifa, Emilie Crouzat, Fabien Stark, Jean-Pierre Müller, Jacques Lasseur
2023 J jnl
CoRR
Andrew Perkis, Mattia Bellini, Valentina Nisi, María Cecilia Reyes, Cristina Sylla, Mijalche Santa, Anna Zaluczkowska, Shafaq Irshad, Ágnes Karolina Bakk, Fanny Barnabé, Daniel Barnard, Nadia Boukhelifa, Øyvind Sørdal Klungre, Hartmut Koenitz, Vincenzo Lombardo, Mirjam Palosaari Eladhari, Catia Prandi, Scott Rettberg, Anca Serbanescu, Sonia Sousa, Petros S. Stefaneas, Dimitar Uzunov, Mirjam Vosmeer, Marcin Wardaszko
2023 J jnl
IEEE Trans. Vis. Comput. Graph.
Mehdi Chakhchoukh, Nadia Boukhelifa, Anastasia Bezerianos
2023 J jnl
IEEE Computer Graphics and Applications
Nadia Boukhelifa, Chris R. Johnson, Kristin Potter
2022 J jnl
Dagstuhl Reports
Nadia Boukhelifa, Christopher R. Johnson, Kristi Potter
2020 J jnl
IEEE Computer Graphics and Applications
Nadia Boukhelifa, Anastasia Bezerianos, Remco Chang, Christopher Collins, Steven Mark Drucker, Alexander Endert, Jessica Hullman, Christopher L. North, Michael Sedlmair, Theresa-Marie Rhyne
2020 conf
CHI Extended Abstracts
Antoine Barczewski, Anastasia Bezerianos, Nadia Boukhelifa
2020 J jnl
IEEE Trans. Vis. Comput. Graph.
Jiali Liu, Nadia Boukhelifa, James R. Eagan
2019 A* conf
CHI
Nadia Boukhelifa, Anastasia Bezerianos, Ioan Cristian Trelea, Nathalie Méjean Perrot, Evelyne Lutton
2019 J jnl
CoRR
Nadia Boukhelifa, Anastasia Bezerianos, Ioan Cristian Trelea, Nathalie Perrot, Evelyne Lutton
2018 J jnl
CoRR
Nadia Boukhelifa, Anastasia Bezerianos, Evelyne Lutton
2018 ch.
Human and Machine Learning
Nadia Boukhelifa, Anastasia Bezerianos, Evelyne Lutton
2018 J jnl
Genet. Program. Evolvable Mach.
Nadia Boukhelifa, Evelyne Lutton
2018 ch.
Human and Machine Learning
Alberto Paolo Tonda, Nadia Boukhelifa, Thomas Chabin, Marc Barnabé, Benoît Génot, Evelyne Lutton, Nathalie Perrot
2018 J jnl
ACM Journal on Computing and Cultural Heritage
Nadia Boukhelifa, Mike Bryant, Natasa Bulatovic, Ivan Cukic, Jean-Daniel Fekete, Milica Knezevic, Jörg Lehmann, David Stuart, Carsten Thiel
2017 J jnl
Evol. Comput.
Nadia Boukhelifa, Anastasia Bezerianos, Waldo Cancino Ticona, Evelyne Lutton
2017 A* conf
CHI
Nadia Boukhelifa, Marc-Emmanuel Perrin, Samuel Huron, James Eagan
2017 conf
GECCO (Companion)
Thomas Chabin, Marc Barnabé, Nadia Boukhelifa, Fernanda Fonseca, Alberto Paolo Tonda, Hélène Velly, Nathalie Perrot, Evelyne Lutton
2017 conf
Artificial Evolution
Thomas Chabin, Marc Barnabé, Nadia Boukhelifa, Fernanda Fonseca, Alberto Paolo Tonda, Hélène Velly, Benjamin Lemaitre, Nathalie Perrot, Evelyne Lutton
2016 J jnl
CoRR
Nadia Boukhelifa, Mike Bryant, Natasa Bulatovic, Ivan Cukic, Jean-Daniel Fekete, Milica Knezevic, Jörg Lehmann, David Stuart, Carsten Thiel
2015 conf
EuroRV³@EuroVis
Nadia Boukhelifa, Anastasia Bezerianos, Evelyne Lutton
2015 conf
EuroVA@EuroVis
Nadia Boukhelifa, Emmanouil Giannisakis, Evanthia Dimara, Wesley Willett, Jean-Daniel Fekete
2013 J jnl
Comput. Graph. Forum
Nadia Boukhelifa, Waldo Cancino Ticona, Anastasia Bezerianos, Evelyne Lutton
2013 conf
GECCO (Companion)
Waldo Cancino Ticona, Nadia Boukhelifa, Anastasia Bezerianos, Evelyne Lutton
2012 J jnl
IEEE Trans. Vis. Comput. Graph.
Nadia Boukhelifa, Anastasia Bezerianos, Tobias Isenberg, Jean-Daniel Fekete
2012 B conf
IEEE Congress on Evolutionary Computation
Waldo Cancino Ticona, Nadia Boukhelifa, Evelyne Lutton
2012 J jnl
IEEE Trans. Vis. Comput. Graph.
Jo Wood, Petra Isenberg, Tobias Isenberg, Jason Dykes, Nadia Boukhelifa, Aidan Slingsby
2010 conf
IEEE VAST
Nadia Boukhelifa, Fanny Chevalier, Jean-Daniel Fekete
2009 conf
CHI Extended Abstracts
Nadia Boukhelifa, David J. Duke
2009 conf
Eurographics (Areas Papers)
Nadia Boukhelifa, David J. Duke
2008 conf
CAe
Nadia Boukhelifa, David J. Duke
2005 conf
WSCG (Full Papers)
Simone Frau, Jonathan C. Roberts, Nadia Boukhelifa
2003 J jnl
Inf. Vis.
Nadia Boukhelifa, Peter J. Rodgers
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.")