Vincent Cheutet

42 papers B 1C 2Journal 17Unranked 22
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Ind. Eng.
Meriem Smati, Jannik Laval, Christophe Danjou, Vincent Cheutet
2025 C conf
MODELSWARD
Meriem Smati, Vincent Cheutet, Christophe Danjou, Jannik Laval
2025 J jnl
Enterp. Inf. Syst.
Jérémie Marchand, Jannik Laval, Aicha Sekhari, Vincent Cheutet, Jean-Baptiste Danielou
2025 J jnl
Comput. Ind. Eng.
Amaratou Mahamadou Saley, Thierry Moyaux, Aicha Sekhari Seklouli, Vincent Cheutet, Jean-Baptiste Danielou
2025 J jnl
CoRR
Amaratou Mahamadou Saley, Thierry Moyaux, Aicha Sekhari, Vincent Cheutet, Jean-Baptiste Danielou
2025 J jnl
J. Simulation
Yinling Liu, Thierry Moyaux, Guillaume Bouleux, Vincent Cheutet
2025 C conf
CoDIT
Jessica Florencia, Lorraine Trilling, Thierry Moyaux, Ikram Lafnoune, Andrea Mantoan, Ludovica Maria Pomilio, Guillaume Bouleux, Vincent Cheutet
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Jessica Florencia, Thierry Moyaux, Lorraine Trilling, Guillaume Bouleux, Vincent Cheutet
2024 conf
SOHOMA
Michael Schlecht, Vincent Cheutet, Jessica Florencia, Thierry Moyaux, Lorraine Trilling, Guillaume Bouleux
2024 conf
PLM (1)
Meriem Smati, Jannik Laval, Vincent Cheutet, Christophe Danjou
2024 conf
IN4PL (1)
Amaratou Mahamadou Saley, Thierry Moyaux, Aicha Sekhari, Guillaume Bouleux, Vincent Cheutet, Jean-Baptiste Danielou
2023 conf
SOHOMA
Farah Abdoune, Vincent Cheutet, Maroua Nouiri, Olivier Cardin
2023 conf
SOHOMA
Jessica Florencia, Thierry Moyaux, Lorraine Trilling, Guillaume Bouleux, Vincent Cheutet
2023 conf
PLM (1)
Vincent Cheutet, Aicha Sekhari, Chantal Cherifi, Justin Favre, Mohamed Douass, Maxence Millescamps
2023 J jnl
Expert Syst. Appl.
Clément Pealat, Guillaume Bouleux, Vincent Cheutet, Maxime Maignan, Luc Provoost, Sylvie Pillet, Olivier Mory
2022 J jnl
Pattern Recognit.
Clément Pealat, Guillaume Bouleux, Vincent Cheutet
2022 conf
SOHOMA
Guillaume Bouleux, Hind Bril El Haouzi, Vincent Cheutet, Guillaume Demesure, William Derigent, Thierry Moyaux, Lorraine Trilling
2022 conf
PLM
Amaratou Mahamadou Saley, Jérémie Marchand, Aicha Sekhari, Vincent Cheutet, Jean-Baptiste Danielou
2021 J jnl
Softw. Syst. Model.
Yinling Liu, Tao Wang, Haiqing Zhang, Vincent Cheutet
2021 conf
SOHOMA
Ksenia Pystina, Aicha Sekhari, Lilia Gzara, Vincent Cheutet
2021 J jnl
J. Simulation
Yinling Liu, Tao Wang, Haiqing Zhang, Vincent Cheutet
2020 B conf
ICPR
Clément Pealat, Guillaume Bouleux, Vincent Cheutet
2019 conf
SOHOMA
Aurélien Cadiou, Sébastien Henry, Vincent Cheutet, Carole Eyssautier
2019 conf
BHI
Clément Pealat, Guillaume Bouleux, Vincent Cheutet
2019 J jnl
Comput. Ind. Eng.
Yinling Liu, Tao Wang, Haiqing Zhang, Vincent Cheutet, Guohua Shen
2018 conf
SOHOMA
Ahmadzai Ahmadi, Ali Hassan Sodhro, Chantal Cherifi, Vincent Cheutet, Yacine Ouzrout
2018 conf
PLM
Yinling Liu, Tao Wang, Haiqing Zhang, Vincent Cheutet
2018 conf
PLM
Vincent Cheutet, Aicha Sekhari, Nathalie Corbeaux
2018 conf
SKIMA
Ahmadzai Ahmadi, Maisam Moradi, Chantal Cherifi, Vincent Cheutet, Yacine Ouzrout
2017 conf
SKIMA
Ahmadzai Ahmadi, Chantal Cherifi, Vincent Cheutet, Yacine Ouzrout
2017 J jnl
Concurr. Eng. Res. Appl.
Marwa Bouzid, Mohamed Ayadi, Mansour Ikbal, Vincent Cheutet, Mohamed Haddar
2016 conf
SKIMA
Fatima Zohra Tanane, Jannik Laval, Vincent Cheutet
2015 J jnl
Concurr. Eng. Res. Appl.
Mohamed Ayadi, Roberta Costa Affonso, Vincent Cheutet, Mohamed Haddar
2015 conf
PLM
Marwa Bouzid, Mohamed Ayadi, Vincent Cheutet, Mohamed Haddar
2013 conf
PLM
Vincent Cheutet, Patrice Leclaire, Tony Da Silva Botelho, Geneviève Inglebert
2013 conf
PLM
Vincent Cheutet, Marc Zolghadri, Florent Couffin, Patrice Leclaire, Roberta Costa Affonso, Caroline Bourcier
2012 J jnl
Eng. Appl. Artif. Intell.
Ludovic Louis-Sidney, Vincent Cheutet, Samir Lamouri, Olivier Puron, Antoine Mezza
2009 J jnl
J. Intell. Manuf.
Chiara Eva Catalano, Elena Camossi, Rosalinda Ferrandes, Vincent Cheutet, Neyir Sevilmis
2007 J jnl
Int. J. Shape Model.
Vincent Cheutet, Marc Daniel, Stefanie Hahmann, Raphaël La Greca, Jean-Claude Léon, Robert Maculet, David Ménegaux, Basile Sauvage
2005 J jnl
Comput. Graph.
Vincent Cheutet, Chiara Eva Catalano, Jean-Philippe Pernot, Bianca Falcidieno, Franca Giannini, Jean-Claude Léon
2004 conf
SBM
Vincent Cheutet, Chiara Eva Catalano, Jean-Philippe Pernot, Bianca Falcidieno, Franca Giannini, Jean-Claude Léon
2004 conf
WSCG (Short Papers)
Vincent Cheutet, Jean-Philippe Pernot, Jean-Claude Léon, Bianca Falcidieno, Franca Giannini
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.py python
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 MachOExport


class MachOExportExtractor(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_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {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 exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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