Carlo Sartiani

78 papers A* 2A 5B 8C 6Misc 1Journal 22Unranked 33
YearRankTypeTitle / Venue / Authors
2026 J jnl
Theor. Comput. Sci.
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Stefan Klessinger, Carlo Sartiani, Stefanie Scherzinger
2026 J jnl
CoRR
Mohamed-Amine Baazizi, Nour El Houda Ben Ali, Dario Colazzo, Giorgio Ghelli, Stefan Klessinger, Carlo Sartiani, Stefanie Scherzinger
2025 J jnl
CoRR
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Stefan Klessinger, Carlo Sartiani, Stefanie Scherzinger
2025 B conf
EDBT
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2025 conf
DBPL
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Kachimsirikwuo Caleb Imo, Stefan Klessinger, Carlo Sartiani, Stefanie Scherzinger
2024 J jnl
Proc. ACM Program. Lang.
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2023 J jnl
Theor. Comput. Sci.
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2023 J jnl
CoRR
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2022 J jnl
CoRR
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2022 conf
SEBD
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2022 J jnl
CoRR
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2022 J jnl
Proc. VLDB Endow.
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2021 conf
ER Demos/Posters
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Yunchen Ding, Michael Fruth, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2021 B conf
EDBT
Lyes Attouche, Mohamed-Amine Baazizi, Dario Colazzo, Francesco Falleni, Giorgio Ghelli, Cristiano Landi, Carlo Sartiani, Stefanie Scherzinger
2021 J jnl
CoRR
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2021 A conf
ER
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2021 J jnl
CoRR
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2020 conf
ER (Workshops)
Michael Fruth, Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani, Stefanie Scherzinger
2020 B conf
EDBT
Mohamed-Amine Baazizi, Clément Berti, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2020 J jnl
Trans. Large Scale Data Knowl. Centered Syst.
Mohammad Amin Farvardin, Dario Colazzo, Khalid Belhajjame, Carlo Sartiani
2019 A* conf
ICALP
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2019 J jnl
VLDB J.
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2019 B conf
EDBT
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2019 conf
SIGMOD Conference
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2019 conf
DBPL
Mohammad Amin Farvardin, Dario Colazzo, Khalid Belhajjame, Carlo Sartiani
2018 J jnl
Inf. Syst. Frontiers
Nicole Bidoit, Dario Colazzo, Noor Malla, Carlo Sartiani
2018 B conf
SSDBM
Dario Colazzo, Vincenzo Mecca, Maurizio Nolé, Carlo Sartiani
2017 conf
DBPL
Mohamed-Amine Baazizi, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2017 J jnl
ACM Trans. Database Syst.
Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2017 B conf
EDBT
Mohamed-Amine Baazizi, Houssem Ben Lahmar, Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2016 conf
EDBT/ICDT Workshops
Maurizio Nolé, Carlo Sartiani
2016 Misc conf
SAC
Simone Romano, Giuseppe Scanniello, Carlo Sartiani, Michele Risi
2016 B conf
SSDBM
Maurizio Nolé, Carlo Sartiani
2015 conf
ADBIS (Short Papers and Workshops)
Nicole Bidoit, Dario Colazzo, Carlo Sartiani, Alessandro Solimando, Federico Ulliana
2015 conf
SEBD
Nicole Bidoit, Dario Colazzo, Carlo Sartiani, Alessandro Solimando, Federico Ulliana
2015 J jnl
CoRR
Dario Colazzo, Carlo Sartiani
2015 conf
DBPL
Dario Colazzo, Carlo Sartiani
2014 conf
EDBT/ICDT Workshops
Maurizio Nolé, Carlo Sartiani
2014 conf
ICDE Workshops
Dario Colazzo, Carlo Sartiani
2013 J jnl
ACM Trans. Database Syst.
Dario Colazzo, Giorgio Ghelli, Luca Pardini, Carlo Sartiani
2013 J jnl
Theor. Comput. Sci.
Dario Colazzo, Giorgio Ghelli, Luca Pardini, Carlo Sartiani
2013 B conf
EDBT
Nicole Bidoit, Dario Colazzo, Noor Malla, Federico Ulliana, Maurizio Nolé, Carlo Sartiani
2012 C conf
IDEAS
Nicole Bidoit, Dario Colazzo, Noor Malla, Carlo Sartiani
2011 C conf
PPDP
Dario Colazzo, Carlo Sartiani
2011 A* conf
ICDE
Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2009 J jnl
ACM Trans. Internet Techn.
Dario Colazzo, Carlo Sartiani
2009 A conf
ICDT
Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2009 J jnl
Inf. Syst.
Dario Colazzo, Giorgio Ghelli, Carlo Sartiani
2009 A conf
CIKM
Dario Colazzo, Giorgio Ghelli, Luca Pardini, Carlo Sartiani
2008 conf
SEBD
Giorgio Ghelli, Dario Colazzo, Carlo Sartiani
2008 conf
PLAN-X
Giorgio Ghelli, Dario Colazzo, Carlo Sartiani
2008 A conf
CIKM
Giorgio Ghelli, Dario Colazzo, Carlo Sartiani
2007 conf
DBPL
Giorgio Ghelli, Dario Colazzo, Carlo Sartiani
2007 conf
EROW
Giovanni Conforti, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2007 C conf
IDEAS
Giovanni Conforti, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2007 conf
SEBD
Dario Colazzo, Carlo Sartiani
2006 conf
EDBT Workshops
Carlo Sartiani
2006 C conf
PPDP
Dario Colazzo, Carlo Sartiani
2006 conf
SEBD
Dario Colazzo, Carlo Sartiani
2006 J jnl
J. Funct. Program.
Dario Colazzo, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2005 conf
SEBD
Carlo Sartiani
2005 conf
SEBD
Carlo Sartiani, Dario Colazzo
2005 conf
DBPL
Dario Colazzo, Carlo Sartiani
2005 conf
SEBD
Dario Colazzo, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2004 conf
SEBD
Giovanni Conforti, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2004 conf
WWW (Alternate Track Papers & Posters)
Carlo Sartiani
2004 conf
Peer-to-Peer Computing
Carlo Sartiani
2004 A conf
ICFP
Dario Colazzo, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2004 conf
EDBT Workshops
Carlo Sartiani, Paolo Manghi, Giorgio Ghelli, Giovanni Conforti
2003 conf
WebDB
Carlo Sartiani
2003 conf
DBPL
Carlo Sartiani
2003
Carlo Sartiani
2003 C conf
IDEAS
Carlo Sartiani
2002 J jnl
J. Assoc. Inf. Sci. Technol.
Dario Colazzo, Carlo Sartiani, Antonio Albano, Paolo Manghi, Giorgio Ghelli, Luca Lini, Michele Paoli
2002 conf
SEBD
Giovanni Conforti, Giorgio Ghelli, Antonio Albano, Dario Colazzo, Paolo Manghi, Carlo Sartiani
2002 conf
WebDB
Giovanni Conforti, Giorgio Ghelli, Antonio Albano, Dario Colazzo, Paolo Manghi, Carlo Sartiani
2002 conf
WebDB
Dario Colazzo, Giorgio Ghelli, Paolo Manghi, Carlo Sartiani
2002 C conf
IDEAS
Carlo Sartiani, Antonio Albano
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"