Carmen Escribano

20 papers B 3Journal 9Unranked 8
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Comput. Appl. Math.
Carmen Escribano, Raquel Gonzalo
2025 conf
ICMCIS
Catarina Bastos, Francisco Pinto, Rodrigo Bacar, Gustavo Anjos, Margarida Almeida, Armando Nolasco Pinto, Ricardo Chaves, Tiago Dias, Joana Afonso, Rui Calé, Miguel Freitas, Luis Maia, Luis Magalhães, Alejandro Muñiz, Rafael Cantó, Juan Pedro Brito, Jesus Ballesta, Rubén B. Méndez, Stephan Laschet, Sebastian Ramacher, Paul James, Luca Torresetti, Pietro Piscione, Ahmed K. Abdulwahed, Pietro G. Giardina, Vicente Martín, Laura Ortíz, Antonio Pastor, Nelson J. Muga, Nuno A. Silva, Diego R. López, Margarida Vieira, Carmen Escribano, Luis Mengal
2024 conf
ICTON
Vicente Martín, Momtchil Peev, Juan Pedro Brito, Laura Ortíz, R. Brito-Méndez, Rafael J. Vicente, J. Saez-Buruaga, A. J. Sebastián-Lombraña, Marta Irene García Cid, Javier Faba, J. Setien, P. Salas, Carmen Escribano, Luis Mengual, F. Fung, J. Morales, Alejandro Muñiz, Antonio Pastor Perales, Diego R. López
2023 conf
ICTON
Vicente Martín, Juan Pedro Brito, Laura Ortíz, R. Brito-Méndez, Rafael J. Vicente, J. Saez-Buruaga, A. J. Sebastián, Daniel Gómez Aguado, Marta Irene García Cid, J. Setien, P. Salas, Carmen Escribano, Esther Dopazo, José Manuel Rivas-Moscoso, Antonio Pastor Perales, Diego R. López
2021 J jnl
CoRR
Vicente Martín, Juan Pedro Brito, Carmen Escribano, Marco Menchetti, Catherine White, Andrew Lord, Felix Wissel, Matthias Gunkel, Paulette Gavignet, Naveena Genay, Olivier Le Moult, Carlos Abellán, Antonio Manzalini, Antonio Pastor Perales, Víctor López, Diego R. López
2020 conf
ICTON
Vicente Martín, Diego R. López, Alejandro Aguado, Juan Pedro Brito, J. Setien, P. Salas, Carmen Escribano, Víctor López, Antonio Pastor Perales, Momtchil Peev
2020 J jnl
Comput. Math. Methods
Carmen Escribano, Raquel Gonzalo, Emilio Torrano
2015 J jnl
Discret. Appl. Math.
Carmen Escribano, Antonio Giraldo, María Asunción Sastre
2013 J jnl
Adv. Comput. Math.
Carmen Escribano, Antonio Giraldo, María Asunción Sastre, Emilio Torrano
2012 conf
CTIC
Carmen Escribano, Antonio Giraldo, María Asunción Sastre
2012 J jnl
J. Math. Imaging Vis.
Carmen Escribano, Antonio Giraldo, María Asunción Sastre
2012 J jnl
Pattern Recognit. Lett.
Carmen Escribano, Antonio Giraldo, María Asunción Sastre
2011 J jnl
J. Approx. Theory
Carmen Escribano, Antonio Giraldo, María Asunción Sastre, Emilio Torrano
2011 J jnl
J. Comput. Appl. Math.
Carmen Escribano, Antonio Giraldo, María Asunción Sastre, Emilio Torrano
2009 conf
DGCI
Carmen Escribano, Antonio Giraldo, María Asunción Sastre
2008 B conf
ICALT
Tomás Álvarez, Carmen Escribano, Daniel Fernández, Antonio Giraldo, María Asunción Sastre
2008 conf
WALTD
Tomás Álvarez, Carmen Escribano, Daniel Fernández, Antonio Giraldo, María Asunción Sastre
2008 B conf
ITiCSE
Carmen Escribano, Antonio Giraldo, María Asunción Sastre, Mario Trotta
2008 conf
DGCI
Carmen Escribano, Antonio Giraldo, María Asunción Sastre
2008 B conf
ITiCSE
Carmen Escribano, Antonio Giraldo, Águeda Mata, María Asunción Sastre
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.")