Carmelina Ruggiero

24 papers B 1C 2Journal 8Unranked 13
YearRankTypeTitle / Venue / Authors
2022 J jnl
Informatics
Elena Lazarova, Sara Mora, Norbert Maggi, Carmelina Ruggiero, Alessandro Cosolito Vitale, Paolo Rubartelli, Mauro Giacomini
2021 conf
MIE
Elena Lazarova, Sara Mora, Paolo Rubartelli, Alessandro Cosolito Vitale, Luisa Pareto, Norbert Maggi, Carmelina Ruggiero, Mauro Giacomini
2021 conf
EFMI-STC
Norbert Maggi, Ariam Boaglio, Carmelina Ruggiero, Roberto Fancellu, Francesco Cocchiara, Domenico Coviello, Deborah Capanna, Mauro Giacomini
2021 conf
EFMI-STC
Roberta Gazzarata, Norbert Maggi, Luca Douglas Magnoni, Maria Eugenia Monteverde, Carmelina Ruggiero, Mauro Giacomini
2019 conf
pHealth
Norbert Maggi, Luca Douglas Magnoni, Carmelina Ruggiero, Roberta Gazzarata, Mauro Giacomini
2019 conf
MedInfo
Norbert Maggi, Antonella Adornetto, Stefano Scillieri, Ezio Nicholas Bruno Urbina, Carmelina Ruggiero, Mauro Giacomini
2018 conf
RTSI
Norbert Maggi, Carmelina Ruggiero, Mauro Giacomini
2015 conf
EMBC
Elena Dellacasa, Laura Pastorino, Chiara Scanarotti, Stefania Vernazza, Anna Maria Bassi, Ranieri Rolandi, Carmelina Ruggiero
2013 C conf
BIBE
Massimo Giulianelli, Laura Pastorino, Roberta Ferretti, Carmelina Ruggiero
2013 C conf
BIBE
Norbert Maggi, Patrizio Arrigo, Carmelina Ruggiero
2012 conf
EMBC
Norbert Maggi, Patrizio Arrigo, Carmelina Ruggiero
2011 conf
EMBC
Norbert Maggi, Patrizio Arrigo, Carmelina Ruggiero
2001 B conf
AIME
Mauro Giacomini, Raffaella Michelini, Francesca Deantoni, Carmelina Ruggiero
1999 conf
MIE
Mauro Giacomini, Stefania Bertone, Carmelina Ruggiero, Federico Caneva Soumetz, Angela Bisio, G. Odino, Letizia Calegari
1999 conf
MIE
Mauro Giacomini, Carmelina Ruggiero, I. Martini, J. L. McDermott, O. E. Varnier
1999 J jnl
IEEE Internet Comput.
Roberto Sacile, Carmelina Ruggiero, Claudio Lombardo, Guido Nicolò, Guenter Wolf, Birgit Rudolf, Iver Petersen
1999 conf
MIE
Mauro Giacomini, Carmelina Ruggiero, P. Borro, C. Mansi
1997 J jnl
IEEE Trans. Biomed. Eng.
Mauro Giacomini, Carmelina Ruggiero, Stefania Bertone, Letizia Calegari
1993 J jnl
IEEE Trans. Biomed. Eng.
Carmelina Ruggiero, Roberto Sacile, Giuseppe Rauch
1991 J jnl
IEEE Trans. Biomed. Eng.
Salvatore Gaglio, Mauro Giacomini, Claudio Nicolini, Carmelina Ruggiero
1991 conf
MIE
Salvatore Gaglio, Mauro Giacomini, Claudio Nicolini, Carmelina Ruggiero
1990 J jnl
Appl. Artif. Intell.
Salvatore Gaglio, Mauro Giacomini, A. Ponassi, Carmelina Ruggiero
1989 J jnl
Artif. Intell. Medicine
F. Cardinali, F. Grosso, Carmelina Ruggiero, Giulio Sandini
1988 J jnl
Appl. Artif. Intell.
Edoardo Ardizzone, F. Bonadonna, Salvatore Gaglio, Claudio Nicolini, Carmelina Ruggiero, Filippo Sorbello
redb/extractors/decompiler/apk/apktool_wrapper.py
← Index redb/extractors/decompiler/apk/apktool_wrapper.py python
"""Apktool disassembler subprocess wrapper.

Manages apktool subprocess execution for smali disassembly,
following the CAPA extractor subprocess pattern.
"""

import os
import signal
import subprocess
from typing import List, Optional


class ApktoolDisassembler:
    """Subprocess wrapper for apktool smali disassembly."""

    def __init__(
        self, apktool_path: str = None, timeout: int = None, log=None
    ):
        self.apktool_path = apktool_path or os.getenv("APKTOOL_PATH", "apktool")
        self.timeout = timeout or int(os.getenv("APKTOOL_TIMEOUT", "120"))
        self.log = log

    def disassemble(self, apk_path: str, output_dir: str) -> bool:
        """Run apktool disassembly on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.apktool_path,
            "d",
            "--no-res",
            "--force",
            "--output", output_dir,
            apk_path,
        ]

        try:
            process = subprocess.Popen(
                cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid,
            )

            try:
                stdout, stderr = process.communicate(timeout=self.timeout)
                if process.returncode != 0:
                    if self.log:
                        self.log.warning(
                            f"apktool returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    return False
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"apktool timed out after {self.timeout}s"
                    )
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=3)
                except (ProcessLookupError, subprocess.TimeoutExpired):
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except ProcessLookupError:
                        pass
                return False

        except FileNotFoundError:
            if self.log:
                self.log.error(
                    f"apktool not found at '{self.apktool_path}'. "
                    "Install apktool or set APKTOOL_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"apktool execution error: {e}")
            return False

    def get_smali_directories(self, output_dir: str) -> List[str]:
        """Return paths to all smali output directories.

        Handles multi-DEX: smali/, smali_classes2/, smali_classes3/, etc.
        """
        smali_dirs = []
        if not os.path.isdir(output_dir):
            return smali_dirs

        for entry in sorted(os.listdir(output_dir)):
            if entry == "smali" or entry.startswith("smali_classes"):
                full_path = os.path.join(output_dir, entry)
                if os.path.isdir(full_path):
                    smali_dirs.append(full_path)

        return smali_dirs