Ionela Prodan

87 papers C 9Journal 35Unranked 43
YearRankTypeTitle / Venue / Authors
2026 J jnl
Eur. J. Control
Huu Thien Nguyen, Ionela Prodan, Fernando A. C. C. Fontes
2026 J jnl
Neural Comput. Appl.
Huu-Thinh Do, Ionela Prodan
2026 J jnl
CoRR
Bogdan Gheorghe, Daniel Ioan, Cristian Flutur, Ionela Prodan, Florin Stoican
2026 J jnl
Autom.
Huu-Thinh Do, Franco Blanchini, Stefano Miani, Ionela Prodan
2026 J jnl
CoRR
Theodor-Gabriel Nicu, Florin Stoican, Daniel-Mihail Ioan, Ionela Prodan
2025 J jnl
Eur. J. Control
Huu-Thinh Do, Franco Blanchini, Ionela Prodan
2025 J jnl
CoRR
Huu-Thinh Do, Ionela Prodan, Florin Stoican
2025 J jnl
Eur. J. Control
Beatrice M. Balaceanu, Florin Stoican, Bogdan D. Ciubotaru, Ionela Prodan
2025 C conf
ACC
Minh Tuan Dinh, Ionela Prodan, Olivier Lesage, Eduardo Mendes
2025 J jnl
Int. J. Control
Huu-Thinh Do, Ionela Prodan
2025 J jnl
CoRR
Huu-Thinh Do, Franco Blanchini, Stefano Miani, Ionela Prodan
2025 J jnl
CoRR
Vlad-Matei Angheluta, Bogdan Gheorghe, Daniel Ioan, Ionela Prodan, Florin Stoican
2025 conf
RFID-TA
Nicolas Barbot, Ionela Prodan
2024 conf
CCTA
Duc-Tri Vo, Ionela Prodan, Laurent Lefèvre, Vincent Vanel, Sylvain Costenoble, Binh Dinh
2024 J jnl
CoRR
Duc-Tri Vo, Ionela Prodan, Laurent Lefèvre, Vincent Vanel, Sylvain Costenoble, Binh Dinh
2024 J jnl
IEEE Control. Syst. Lett.
Bogdan Gheorghe, Daniel Ioan, Florin Stoican, Ionela Prodan
2024 conf
CDC
Vincent Marguet, Florin Stoican, Ionela Prodan
2024 J jnl
IEEE Trans. Control. Syst. Technol.
Huu-Thinh Do, Franco Blanchini, Stefano Miani, Ionela Prodan
2024 conf
ECC
Minh Tuan Dinh, Ionela Prodan, Olivier Lesage, Eduardo Mendes
2024 J jnl
Autom.
Huu Thien Nguyen, Ngoc Thinh Nguyen, Ionela Prodan
2024 conf
ECC
Bogdan Gheorghe, Florin Stoican, Ionela Prodan
2024 J jnl
IEEE Control. Syst. Lett.
Huu-Thinh Do, Ionela Prodan
2024 conf
MED
Florin Stoican, Vincent Marguet, Dan Popescu, Ionela Prodan, Loretta Ichim
2024 J jnl
CoRR
Huu-Thinh Do, Ionela Prodan
2024 J jnl
CoRR
Duc-Tri Vo, Ionela Prodan, Laurent Lefèvre, Vincent Vanel, Sylvain Costenoble, Binh Dinh
2024 conf
CDC
Theodor-Gabriel Nicu, Florin Stoican, Daniel Ioan, Ionela Prodan
2024 conf
ECC
Huu-Thinh Do, Ionela Prodan
2023 J jnl
CoRR
Huu-Thinh Do, Franco Blanchini, Ionela Prodan
2023 conf
ECC
Bogdan Gheorghe, Florin Stoican, Ionela Prodan
2023 conf
CDC
Huu-Thinh Do, Franco Blanchini, Ionela Prodan
2023 J jnl
CoRR
Huu-Thinh Do, Franco Blanchini, Ionela Prodan
2023 J jnl
CoRR
Huu-Thinh Do, Ionela Prodan
2023 conf
ECC
Huu-Thinh Do, Ionela Prodan
2023 J jnl
CoRR
Huu-Thinh Do, Ionela Prodan
2023 conf
ICINCO (1)
Duc-Tri Vo, Ionela Prodan, Laurent Lefèvre, Vincent Vanel, Sylvain Costenoble, Binh Dinh
2023 J jnl
CoRR
Duc-Tri Vo, Ionela Prodan, Laurent Lefèvre, Vincent Vanel, Sylvain Costenoble, Binh Dinh
2023 conf
CDC
Bogdan Gheorghe, Florin Stoican, Ionela Prodan
2023 conf
ECC
Pol Jané-Soneira, Ionela Prodan, Albertus Johannes Malan, Sören Hohmann
2023 J jnl
CoRR
Pol Jané-Soneira, Ionela Prodan, Albertus Johannes Malan, Sören Hohmann
2023 conf
ECC
Vincent Marguet, Florin Stoican, Ionela Prodan
2023 conf
RFID
Nicolas Barbot, Ionela Prodan
2023 conf
CDC
Pol Jané-Soneira, Albertus Johannes Malan, Ionela Prodan, Sören Hohmann
2023 J jnl
CoRR
Pol Jané-Soneira, Albertus Johannes Malan, Ionela Prodan, Sören Hohmann
2023 conf
ECC
Ngoc Minh Trang Vu, Thanh Hung Pham, Ionela Prodan, Laurent Lefèvre
2023 J jnl
IEEE Syst. J.
Vittorio Casagrande, Ionela Prodan, Sarah K. Spurgeon, Francesca Boem
2023 conf
ECC
Theodor-Gabriel Nicu, Florin Stoican, Ionela Prodan
2023 conf
ECC
Huu Thien Nguyen, Ionela Prodan, Fernando A. C. C. Fontes
2022 J jnl
Syst. Control. Lett.
Thanh Hung Pham, Ngoc Minh Trang Vu, Ionela Prodan, Laurent Lefèvre
2022 C conf
ACC
Florin Stoican, Theodor-Gabriel Nicu, Ionela Prodan
2022 conf
ECC
Vittorio Casagrande, Ionela Prodan, Sarah K. Spurgeon, Francesca Boem
2021 conf
ECC
Vittorio Casagrande, Ionela Prodan, Sarah K. Spurgeon, Francesca Boem
2021 conf
ICSTCC
Huu-Thinh Do, Ionela Prodan, Florin Stoican
2021 conf
ICSTCC
Ayoub Ben Ayed, Denis Dochain, Ionela Prodan, Carlos Eduardo Robles-Rodríguez
2021 J jnl
Annu. Rev. Control.
Daniel Ioan, Ionela Prodan, Sorin Olaru, Florin Stoican, Silviu-Iulian Niculescu
2021 conf
ECC
Florin Stoican, Alexandru Postolache, Ionela Prodan
2021 J jnl
IEEE Trans. Control. Syst. Technol.
Ngoc Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2020 J jnl
Int. J. Control
Ngoc Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2020 J jnl
IEEE Control. Syst. Lett.
Daniel Ioan, Sorin Olaru, Ionela Prodan, Florin Stoican, Silviu-Iulian Niculescu
2019 C conf
ACC
Ngoc Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2019 C conf
ACC
Daniel Ioan, Ionela Prodan, Florin Stoican, Sorin Olaru, Silviu-Iulian Niculescu
2019 conf
ECC
Ngo-Quoc-Huy Tran, Ionela Prodan, Esten Ingar Grøtli, Laurent Lefèvre
2019 conf
ICCA
Florin Stoican, Ionela Prodan, Esten Ingar Grøtli, Ngoc Thinh Nguyen
2019 conf
ECC
Yoann Hervagault, Ionela Prodan, Laurent Lefèvre
2019 conf
ECC
Daniel Ioan, Sorin Olaru, Silviu-Iulian Niculescu, Ionela Prodan, Florin Stoican
2019 conf
CDC
Ionela Prodan, Florin Stoican, Christophe Louembet
2019 C conf
ACC
Ngoc Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2019 conf
ICCA
Daniel Ioan, Sorin Olaru, Ionela Prodan, Florin Stoican, Silviu-Iulian Niculescu
2018 conf
ECC
Thanh Hung Pham, Ionela Prodan, Denis Genon-Catalot, Laurent Lefèvre
2018 conf
ECC
Ngoc Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2018 C conf
ICARCV
Florin Stoican, Ionela Prodan, Dan Popescu, Loretta Ichim, Emilian Vlasceanu
2017 conf
MED
Florin Stoican, Ionela Prodan, Dan Popescu, Loretta Ichim
2017 conf
MED
Ngoc Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2016 J jnl
CoRR
Thinh Nguyen, Ionela Prodan, Laurent Lefèvre
2016 J jnl
CoRR
Florin Stoican, Vlad-Mihai Ivanusca, Ionela Prodan
2016 conf
MED
Florin Stoican, Vlad-Mihai Ivanusca, Ionela Prodan, Dan Popescu
2015 conf
MED
Florin Stoican, Ionela Prodan, Dan Popescu
2014 C conf
CCA
Ionela Prodan, Enrico Zio
2013 conf
MED
Mircea-Ionel Strutu, Florin Stoican, Ionela Prodan, Dan Popescu, Sorin Olaru
2013 C conf
CCA
Ionela Prodan, Sorin Olaru, Fernando A. C. C. Fontes, Cristina Stoica, Silviu-Iulian Niculescu
2013 conf
ECC
Florin Stoican, Ionela Prodan, Sorin Olaru
2013 J jnl
Int. J. Appl. Math. Comput. Sci.
Ionela Prodan, Sorin Olaru, Cristina Stoica, Silviu-Iulian Niculescu
2012 J jnl
J. Optim. Theory Appl.
Ionela Prodan, Florin Stoican, Sorin Olaru, Silviu-Iulian Niculescu
2012 conf
KES-AMSTA
Ionela Prodan, Sorin Olaru, Cristina Stoica, Silviu-Iulian Niculescu
2012 conf
ICAART (2)
Ionela Prodan, Sorin Olaru, Cristina Stoica, Silviu-Iulian Niculescu
2011 conf
CDC/ECC
Florin Stoican, Ionela Prodan, Sorin Olaru
2011 conf
ICINCO (1)
Ionela Prodan, Sorin Olaru, Cristina Stoica, Silviu-Iulian Niculescu
2011 C conf
ACC
Florin Stoican, Ionela Prodan, Sorin Olaru
redb/extractors/decompiler/_archive/DecompileGhidra-old.py
← Index redb/extractors/decompiler/_archive/DecompileGhidra-old.py python
from hashlib import sha256
import inspect
from pathlib import Path
import subprocess
import json
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import time

from dotenv import load_dotenv

from redb.extractors.enum import Tag
from redb.models.dataclasses import Decompiled
from redb.extractors.extractor import Extractor


class DecompileGhidra(Extractor):
    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, log, index_prefix, elastic_index, known_benign, known_malicious
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.elastic_index = self.index_prefix + "-ghidra"
        self.ghidra_path = "/opt/ghidra"
        self.java_script_path = (
            self.ghidra_path
            + "/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
        )
        self.decompiled = None
        load_dotenv()
        self.decompiled_folder = os.getenv("DECOMPILED_FOLDER", "/opt/decompiled")
        self.log.debug(f"Decompiled folder: {self.decompiled_folder}")

    def run_command(self, cmd, env=None):
        try:
            self.log.info(f"Starting command: {' '.join(cmd)}")
            start_time = time.time()
            TIMEOUT = 1200  # 20 minutes in seconds
            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
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
            except subprocess.TimeoutExpired:
                process.kill()
                self.log.error(f"Ghidra timed out after {TIMEOUT} seconds")
                # raise subprocess.TimeoutExpired(process.args, TIMEOUT)
                return None
            end_time = time.time()

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

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

    def analyze_binary(self):
        self.log.debug(f"Ghidra path: {self.ghidra_path}")
        self.log.debug(f"Binary path: {self.filepath}")
        self.log.debug(f"Java script path: {self.java_script_path}")

        # Check if Java script exists
        if not os.path.exists(self.java_script_path):
            self.log.error(f"Error: Java script not found at {self.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', '')}"
        env["DECOMPILED_FOLDER"] = self.decompiled_folder

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

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

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

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

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

            # Read the output JSON file
            output_file = os.path.join(
                self.decompiled_folder, self.sha256 + "-decompiled.json"
            )
            if os.path.exists(output_file):
                with open(output_file, "r") as f:
                    functions = json.load(f)
                return functions
            else:
                self.log.error(
                    f"Output file {output_file} not found. Ghidra analysis may have failed."
                )
                return None
        finally:
            # Clean up
            if os.path.exists(project_path):
                shutil.rmtree(project_path)
                self.log.debug(f"Deleted temporary project path: {project_path}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            functions = self.analyze_binary()

            if functions:
                self.log.info(f"Extracted functions from {self.filepath}:")
                for func in functions:
                    id = sha256(func["address"].encode()).hexdigest()
                    self.decompiled = Decompiled(
                        _id=id,
                        decompiled_function_name=func["name"],
                        decompiled_function_address=func["address"],
                        decompiled_function=func["decompiled"],
                    )
                    self.export_to_elastic([self.decompiled])
            else:
                self.log.error("No decompiled functions extracted.")
            return True
        except Exception as e:
            self.log.error(f"Error extracting decompiled information: {e}")
            return None

    def tag(self):
        return Tag.DECOMPILED.value