Venanzio Cichella

56 papers A* 1A 2C 7Journal 34Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Nick Gorman, Gage MacLin, Maxwell Hammond, Venanzio Cichella
2025 C conf
ACC
Hyungsoo Kang, Isaac Kaminer, Venanzio Cichella, Naira Hovakimyan
2025 J jnl
CoRR
Hyungsoo Kang, Isaac Kaminer, Venanzio Cichella, Naira Hovakimyan
2025 conf
CDC
Gage MacLin, Venanzio Cichella, Andrew Patterson, Irene M. Gregory
2025 conf
CDC
Maxwell Hammond, Gage MacLin, Amirreza F. Golestaneh, Venanzio Cichella
2024 J jnl
CoRR
Vladimir Petrov, Gage MacLin, Venanzio Cichella
2024 C conf
ACC
Hyungsoo Kang, Isaac Kaminer, Venanzio Cichella, Naira Hovakimyan
2024 conf
CDC
Camilla Tabasso, Venanzio Cichella, Isaac Kaminer
2024 J jnl
CoRR
Gage MacLin, Maxwell Hammond, Venanzio Cichella, J. Ezequiel Martin
2024 C conf
ACC
Camilla Tabasso, Venanzio Cichella
2024 conf
CDC
Gage MacLin, Venanzio Cichella, Andrew Patterson, Michael J. Acheson, Irene M. Gregory
2024 J jnl
CoRR
Gage MacLin, Venanzio Cichella, Andrew Patterson, Michael J. Acheson, Irene M. Gregory
2024 conf
RoboSoft
Maxwell Hammond, Venanzio Cichella, Amirreza F. Golestaneh, Caterina Lamuta
2024 J jnl
CoRR
Amirreza F. Golestaneh, Venanzio Cichella, Caterina Lamuta
2024 J jnl
CoRR
Amirreza F. Golestaneh, Maxwell Hammond, Venanzio Cichella
2024 J jnl
IEEE Control. Syst. Lett.
Amirreza F. Golestaneh, Maxwell Hammond, Venanzio Cichella
2023 J jnl
Frontiers Robotics AI
Maxwell Hammond, Anthony Dempsey, William Ward, Stephen Stewart, James H. Neilan, Jessica Friz, Caterina Lamuta, Venanzio Cichella
2023 J jnl
CoRR
Maxwell Hammond, Venanzio Cichella, Caterina Lamuta
2023 J jnl
CoRR
Hyungsoo Kang, Isaac Kaminer, Venanzio Cichella, Naira Hovakimyan
2023 J jnl
CoRR
Hyungsoo Kang, Isaac Kaminer, Venanzio Cichella, Naira Hovakimyan
2023 J jnl
Robotics
Carlo Greco, Thilina H. Weerakkody, Venanzio Cichella, Leonardo Pagnotta, Caterina Lamuta
2023 J jnl
CoRR
Maxwell Hammond, Venanzio Cichella, Amirreza F. Golestaneh, Caterina Lamuta
2022 J jnl
CoRR
Nicholas Rober, Maxwell Hammond, Venanzio Cichella, Juan E. Martin, Pablo M. Carrica
2022 J jnl
CoRR
Camilla Tabasso, Venanzio Cichella
2022 J jnl
Sensors
Calvin Kielas-Jensen, Venanzio Cichella, Thomas Berry, Isaac Kaminer, Claire Walton, António M. Pascoal
2022 J jnl
CoRR
J. Ezequiel Martin, Maxwell Hammond, Nicholas Rober, Yakin Kim, Venanzio Cichella, Pablo M. Carrica
2022 J jnl
IEEE Control. Syst. Lett.
Maxwell Hammond, Venanzio Cichella, Thilina H. Weerakkody, Caterina Lamuta
2021 J jnl
IEEE Trans. Autom. Control.
Hanmin Lee, Venanzio Cichella, Naira Hovakimyan
2021 C conf
ACC
Thiago Marinho, Massi Amrouche, Dusan M. Stipanovic, Venanzio Cichella, Naira Hovakimyan
2021 J jnl
CoRR
Thiago Marinho, Massinissa Amrouche, Dusan M. Stipanovic, Venanzio Cichella, Naira Hovakimyan
2021 J jnl
IEEE Control. Syst. Lett.
Camilla Tabasso, Nicola Mimmo, Venanzio Cichella, Lorenzo Marconi
2021 J jnl
IEEE Trans. Autom. Control.
Venanzio Cichella, Isaac Kaminer, Claire Walton, Naira Hovakimyan, António M. Pascoal
2021 C conf
ACC
Camilla Tabasso, Venanzio Cichella, Nicola Mimmo, Lorenzo Marconi
2021 J jnl
J. Optim. Theory Appl.
Calvin Kielas-Jensen, Venanzio Cichella, David W. Casbeer, Satyanarayana Gupta Manyam, Isaac E. Weintraub
2021 J jnl
Robotics
Camilla Tabasso, Venanzio Cichella, Syed Bilal Mehdi, Thiago Marinho, Naira Hovakimyan
2021 conf
CDC
Hyungsoo Kang, Hyung-Jin Yoon, Venanzio Cichella, Naira Hovakimyan, Petros G. Voulgaris
2021 J jnl
CoRR
Hyungsoo Kang, Hyung-Jin Yoon, Venanzio Cichella, Naira Hovakimyan, Petros G. Voulgaris
2020 J jnl
CoRR
Calvin Kielas-Jensen, Venanzio Cichella
2020 J jnl
J. Aerosp. Inf. Syst.
Camilla Tabasso, Venanzio Cichella, Syed Bilal Mehdi, Thiago Marinho, Naira Hovakimyan
2019 A conf
IROS
Calvin Kielas-Jensen, Venanzio Cichella
2019 conf
CDC
Venanzio Cichella, Isaac Kaminer, Claire Walton, Naira Hovakimyan, António M. Pascoal
2019 J jnl
CoRR
Hanmin Lee, Venanzio Cichella, Naira Hovakimyan
2019 conf
Robotics: Science and Systems
Arun Lakshmanan, Andrew Patterson, Venanzio Cichella, Naira Hovakimyan
2019 J jnl
CoRR
Arun Lakshmanan, Andrew Patterson, Venanzio Cichella, Naira Hovakimyan
2018 J jnl
CoRR
Venanzio Cichella, Isaac Kaminer, Claire Walton, Naira Hovakimyan, António M. Pascoal
2018 J jnl
J. Intell. Robotic Syst.
Venanzio Cichella, Thiago Marinho, Dusan M. Stipanovic, Naira Hovakimyan, Isaac Kaminer, Anna Trujillo
2018 C conf
ACC
Thiago Marinho, Massinissa Amrouche, Venanzio Cichella, Dusan M. Stipanovic, Naira Hovakimyan
2017 conf
CDC
Syed Bilal Mehdi, Venanzio Cichella, Thiago Marinho, Naira Hovakimyan
2016 A* conf
VR
Thiago Marinho, Arun Lakshmanan, Venanzio Cichella, Christopher Widdowson, Hang Cui, Robert Mitchell Jones, Bentic Sebastian, Camille Goudeseune
2015 conf
CDC
Venanzio Cichella, Thiago Marinho, Dusan M. Stipanovic, Naira Hovakimyan, Isaac Kaminer, Anna Trujillo
2015 J jnl
IEEE Trans Autom. Sci. Eng.
Venanzio Cichella, Isaac Kaminer, Vladimir N. Dobrokhodov, Enric Xargay, Ronald Choe, Naira Hovakimyan, A. Pedro Aguiar, António M. Pascoal
2015 A conf
IROS
Venanzio Cichella, Isaac Kaminer, Vladimir N. Dobrokhodov, Naira Hovakimyan
2015 J jnl
J. Frankl. Inst.
Zongyu Zuo, Venanzio Cichella, Ming Xu, Naira Hovakimyan
2014 C conf
ACC
Hanmin Lee, Venanzio Cichella, Naira Hovakimyan
2012 conf
CDC
Venanzio Cichella, Isaac Kaminer, Enric Xargay, Vladimir N. Dobrokhodov, Naira Hovakimyan, A. Pedro Aguiar, António M. Pascoal
2011 conf
CDC/ECC
Venanzio Cichella, Roberto Naldi, Vladimir N. Dobrokhodov, Isaac Kaminer, Lorenzo Marconi
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachODylib


class MachODylibExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_dylibs"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'String', 'UInt32', 'UInt32',
                'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_dylibs"