Vincent Cocquempot

79 papers A 1C 13Journal 37Unranked 26
YearRankTypeTitle / Venue / Authors
2025 conf
MED
Ameer Ahmadie, Virginie Degardin, Vincent Cocquempot
2024 J jnl
J. Comput. Appl. Math.
Dongsheng Du, Shennan Sun, Vincent Cocquempot, Huanyu Zhao
2023 ch.
Mobile Robot: Motion Control and Path Planning
Ayad Q. Al-Dujaili, Vincent Cocquempot, Maan El Badaoui El Najjar, Daniel Pereira, Amjad J. Humaidi
2023 J jnl
Comput. Ind.
Mohamed Amine Atoui, Vincent Cocquempot
2023 ch.
Mobile Robot: Motion Control and Path Planning
Ayad Q. Al-Dujaili, Vincent Cocquempot, Maan E. El Najjar, Daniel Pereira, Amjad J. Humaidi
2023 J jnl
Reliab. Eng. Syst. Saf.
Miguel Angel Bermeo Ayerbe, Vincent Cocquempot, Carlos Ocampo-Martinez, Javier Diaz-Rozo
2022 A conf
ICCAD
Abdel Karim Abdel Karim, Virginie Degardin, Vincent Cocquempot
2021 conf
ICSC
Abdel Karim Abdel Karim, Mohamed Amine Atoui, Virginie Degardin, Vincent Cocquempot
2021 conf
SysTol
Abdel Karim Abdel Karim, Mohamed Amine Atoui, Virginie Degardin, Vincent Cocquempot
2021 conf
ECC
Mohamed Amine Atoui, Vincent Cocquempot
2021 conf
MED
Mohamed Amine Atoui, Vincent Cocquempot
2021 C conf
VEHITS
Abdel Karim Abdel Karim, Virginie Degardin, Vincent Cocquempot, Mohamed Amine Atoui
2021 J jnl
Eur. J. Control
Mohamed Amine Atoui, Achraf Cohen, Vincent Cocquempot
2020 J jnl
J. Intell. Robotic Syst.
Boussad Abci, Maan El Badaoui El Najjar, Vincent Cocquempot, Gérald Dherbomez
2019 J jnl
IEEE Trans. Control. Syst. Technol.
Hao Yang, Hong Li, Bin Jiang, Vincent Cocquempot
2019 J jnl
Appl. Math. Comput.
Dongsheng Du, Vincent Cocquempot, Bin Jiang
2019 conf
SysTol
Boussad Abci, Maan El Badaoui El Najjar, Vincent Cocquempot
2019 C conf
CoDIT
Boussad Abci, Maan El Badaoui El Najjar, Vincent Cocquempot, Gérald Dherbomez
2018 J jnl
IEEE Trans. Robotics
Yajie Ma, Vincent Cocquempot, Maan El Badaoui El Najjar, Bin Jiang
2018 J jnl
IEEE Trans. Fuzzy Syst.
Dongsheng Du, Shengyuan Xu, Vincent Cocquempot
2018 J jnl
IEEE Access
Dongsheng Du, Shengyuan Xu, Vincent Cocquempot
2018 C conf
FUSION
Boussad Abci, Joelle Al Hage, Maan El Badaoui El Najjar, Vincent Cocquempot
2017 J jnl
Int. J. Appl. Math. Comput. Sci.
Yajie Ma, Vincent Cocquempot, Maan El Badaoui El Najjar, Bin Jiang
2017 conf
MED
Ayad Q. Al-Dujaili, Vincent Cocquempot, Maan El Badaoui El Najjar, Yajie Ma
2017 J jnl
Syst. Control. Lett.
Dongsheng Du, Shengyuan Xu, Vincent Cocquempot
2017 conf
DPS
Yuqi Wang, Jean-Philippe Cassar, Vincent Cocquempot, Anne-Sophie Guilbert
2016 J jnl
Signal Process.
Ke Zhang, Bin Jiang, Vincent Cocquempot
2016 J jnl
Int. J. Appl. Math. Comput. Sci.
Assia Hakem, Vincent Cocquempot, Komi Midzodzi Pekpe
2015 conf
MED
Xian Zhang, Vincent Cocquempot, Abdel Aitouche
2014 J jnl
IEEE Trans. Fuzzy Syst.
Qikun Shen, Bin Jiang, Vincent Cocquempot
2014 conf
ISIC
Xian Zhang, Vincent Cocquempot
2013 conf
ICCA
Xian Zhang, Vincent Cocquempot, Bin Jiang, Hao Yang
2013 C conf
CCA
Boulaid Boulkroune, Abdel Aitouche, Vincent Cocquempot
2013 conf
ICCA
Assia Hakem, Vincent Cocquempot, Komi Midzodzi Pekpe
2013 J jnl
IEEE Trans. Fuzzy Syst.
Qikun Shen, Bin Jiang, Vincent Cocquempot
2013 C conf
ACC
Boulaid Boulkroune, Issam Djemili, Abdel Aitouche, Vincent Cocquempot
2013 C conf
ACC
Hao Yang, Bin Jiang, Vincent Cocquempot, Abdel Aitouche
2013 conf
CDC
Koffi M. Djidula Motchon, Komi Midzodzi Pekpe, Jean-Philippe Cassar, Stephan De Bievre, Vincent Cocquempot
2013 J jnl
Int. J. Appl. Math. Comput. Sci.
Boulaid Boulkroune, Issam Djemili, Abdel Aitouche, Vincent Cocquempot
2013 J jnl
Syst. Control. Lett.
Hao Yang, Bin Jiang, Vincent Cocquempot, Mou Chen
2013 J jnl
IEEE Trans. Autom. Control.
John Leth, Henrik Schiøler, Mehdi Gholami, Vincent Cocquempot
2012 J jnl
J. Syst. Control. Eng.
Qikun Shen, Bin Jiang, Vincent Cocquempot
2012 J jnl
IEEE Trans. Fuzzy Syst.
Qikun Shen, Bin Jiang, Vincent Cocquempot
2012 J jnl
Int. J. Appl. Math. Comput. Sci.
Hao Yang, Bin Jiang, Vincent Cocquempot, Lingli Lu
2011 J jnl
Int. J. Appl. Math. Comput. Sci.
Denis Berdjag, Vincent Cocquempot, Cyrille Christophe, Alexey Ye. Shumsky, Alexey N. Zhirabok
2011 J jnl
Reliab. Eng. Syst. Saf.
Keomany Bouvard, Samuel Artus, Christophe Bérenguer, Vincent Cocquempot
2011 conf
CDC/ECC
Talel Zouari, Komi Midzodzi Pekpe, Vincent Cocquempot, Moufida Ksouri
2011 J jnl
Int. J. Appl. Math. Comput. Sci.
Jean-Philippe Georges, Didier Theilliol, Vincent Cocquempot, Jean-Christophe Ponsart, Christophe Aubrun
2011 C conf
CCA
Mehdi Gholami, Vincent Cocquempot, Henrik Schiøler, Thomas Bak
2011 J jnl
Int. J. Control
Bin Jiang, Hao Yang, Vincent Cocquempot
2011 conf
CDC/ECC
Assia Hakem, Komi Midzodzi Pekpe, Vincent Cocquempot
2011 J jnl
IEEE Trans. Autom. Control.
Hao Yang, Bin Jiang, Vincent Cocquempot, Huaguang Zhang
2010 conf
ITSC
Joffrey Clarhaut, Said Hayat, Blaise Conrard, Vincent Cocquempot
2010 conf
ICCA
Lina Yao, Vincent Cocquempot
2010 conf
ICCA
Lina Yao, Vincent Cocquempot, Hong Wang
2010 J jnl
IEEE Trans. Intell. Transp. Syst.
Hao Yang, Vincent Cocquempot, Bin Jiang
2009 J jnl
Int. J. Control
Hao Yang, Bin Jiang, Vincent Cocquempot
2009 conf
CDC
Hao Yang, Bin Jiang, Vincent Cocquempot
2009 conf
ADHS
Hao Yang, Vincent Cocquempot, Bin Jiang
2009 J jnl
Int. J. Control
Hao Yang, Bin Jiang, Vincent Cocquempot
2009 J jnl
Int. J. Syst. Sci.
Hao Yang, Vincent Cocquempot, Bin Jiang
2009 J jnl
Syst. Control. Lett.
Hao Yang, Vincent Cocquempot, Bin Jiang
2009 J jnl
IEEE Trans. Reliab.
Joffrey Clarhaut, Vincent Cocquempot, Blaise Conrard, Said Hayat
2008 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Hao Yang, Vincent Cocquempot, Bin Jiang
2008 C conf
ACC
Hao Yang, Bin Jiang, Vincent Cocquempot
2008 C conf
ACC
Zehui Mao, Bin Jiang, Peng Shi, Vincent Cocquempot
2007 conf
HSCC
Hao Yang, Bin Jiang, Vincent Cocquempot
2007 conf
CDC
Hao Yang, Vincent Cocquempot, Bin Jiang
2006 J jnl
IEEE Trans. Autom. Control.
Bin Jiang, Marcel Staroswiecki, Vincent Cocquempot
2006 J jnl
IEEE Trans. Control. Syst. Technol.
Carsten Skovmose Kallesoe, Vincent Cocquempot, Roozbeh Izadi-Zamanabadi
2006 conf
CDC
Denis Berdjag, Cyrille Christophe, Vincent Cocquempot
2004 C conf
CCA
Carsten Skovmose Kallesoe, Roozbeh Izadi-Zamanabadi, Henrik Rasmussen, Vincent Cocquempot
2004 C conf
CCA
Dilek Düstegör, Vincent Cocquempot, Marcel Staroswiecki
2003 J jnl
IEEE Trans. Ind. Electron.
Xianrong Chang, Vincent Cocquempot, Cyrille Christophe
2002 C conf
ACC
Bin Jiang, Marcel Staroswiecki, Vincent Cocquempot
2002 C conf
ACC
Cyrille Christophe, Vincent Cocquempot, Bin Jiang
2001 conf
ECC
Bin Jiang, Marcel Staroswiecki, Vincent Cocquempot
2001 conf
CDC
Bin Jiang, Marcel Staroswiecki, Vincent Cocquempot
1999 conf
ECC
G. Comtet-Varga, Cyrille Christophe, Vincent Cocquempot, Marcel Staroswiecki
redb/extractors/elf_extractors/elf_notes.py
← Index redb/extractors/elf_extractors/elf_notes.py python
import inspect
import binascii
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFNote


class ELFNotesExtractor(ELFExtractor):

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

    def _get_note_type_string(self, note_type: int, note_name: str) -> str:
        """Convert note type number to human-readable string."""

        # GNU-specific note types
        if note_name == "GNU":
            gnu_types = {
                1: "NT_GNU_ABI_TAG",
                2: "NT_GNU_HWCAP",
                3: "NT_GNU_BUILD_ID",
                4: "NT_GNU_GOLD_VERSION",
                5: "NT_GNU_PROPERTY_TYPE_0"
            }
            return gnu_types.get(note_type, f"NT_GNU_UNKNOWN_{note_type}")

        # Generic note types
        generic_types = {
            1: "NT_PRSTATUS",
            2: "NT_FPREGSET",
            3: "NT_PRPSINFO",
            4: "NT_TASKSTRUCT",
            5: "NT_AUXV",
            6: "NT_PSTATUS",
            7: "NT_FPREGS",
            8: "NT_PSINFO",
            9: "NT_PRCRED",
            10: "NT_UTSNAME",
            11: "NT_LWPSTATUS",
            12: "NT_LWPSINFO",
            13: "NT_PRFPXREG"
        }

        return generic_types.get(note_type, f"NT_UNKNOWN_{note_type}")

    def _format_note_description(self, note_desc, note_type: int, note_name: str) -> str:
        """Format note description based on type for human readability."""
        try:
            if not note_desc:
                return ""

            # Handle build ID specifically (common case)
            if note_name == "GNU" and note_type == 3:  # NT_GNU_BUILD_ID
                if isinstance(note_desc, bytes):
                    return binascii.hexlify(note_desc).decode('ascii')
                return str(note_desc)

            # Handle ABI tag
            if note_name == "GNU" and note_type == 1:  # NT_GNU_ABI_TAG
                if isinstance(note_desc, bytes) and len(note_desc) >= 16:
                    # ABI tag contains OS, major, minor, subminor
                    import struct
                    try:
                        os_val, major, minor, subminor = struct.unpack('<IIII', note_desc[:16])
                        os_names = {0: "Linux", 1: "GNU", 2: "Solaris", 3: "FreeBSD"}
                        os_name = os_names.get(os_val, f"OS_{os_val}")
                        return f"{os_name} {major}.{minor}.{subminor}"
                    except:
                        pass

            # For binary data, convert to hex
            if isinstance(note_desc, bytes):
                # Limit size for very large descriptions
                if len(note_desc) > 256:
                    return binascii.hexlify(note_desc[:256]).decode('ascii') + "..."
                return binascii.hexlify(note_desc).decode('ascii')

            # For string data
            if isinstance(note_desc, str):
                return note_desc

            # Fallback
            return str(note_desc)

        except Exception as e:
            self.log.error(f"Error formatting note description: {e}")
            return str(note_desc) if note_desc else ""

    def _extract_note_data(self, note, section_name: str) -> ELFNote:
        """Extract data from a single note entry."""
        try:
            # Get note properties
            note_name = note.get('n_name', '').rstrip('\x00') if note.get('n_name') else ""
            note_type_raw = note.get('n_type', 0)
            note_desc_raw = note.get('n_desc', b'')

            # Handle note_type - pyelftools may return string or int
            if isinstance(note_type_raw, str):
                # pyelftools returned the type as a string like 'NT_GNU_BUILD_ID'
                note_type_str = note_type_raw
                # Map known string types to integers
                note_type_map = {
                    'NT_GNU_ABI_TAG': 1,
                    'NT_GNU_HWCAP': 2,
                    'NT_GNU_BUILD_ID': 3,
                    'NT_GNU_GOLD_VERSION': 4,
                    'NT_GNU_PROPERTY_TYPE_0': 5,
                    'NT_PRSTATUS': 1,
                    'NT_FPREGSET': 2,
                    'NT_PRPSINFO': 3,
                    'NT_TASKSTRUCT': 4,
                    'NT_AUXV': 5,
                    'NT_PSTATUS': 6,
                    'NT_FPREGS': 7,
                    'NT_PSINFO': 8,
                    'NT_PRCRED': 9,
                    'NT_UTSNAME': 10,
                    'NT_LWPSTATUS': 11,
                    'NT_LWPSINFO': 12,
                    'NT_PRFPXREG': 13,
                }
                note_type = note_type_map.get(note_type_raw, 0)
            else:
                note_type = note_type_raw
                # Get human-readable type string
                note_type_str = self._get_note_type_string(note_type, note_name)

            # Format description
            note_desc = self._format_note_description(note_desc_raw, note_type, note_name)

            return ELFNote(
                note_name=note_name,
                note_type=note_type,
                note_type_str=note_type_str,
                note_desc=note_desc,
                note_section=section_name
            )

        except Exception as e:
            self.log.error(f"Error extracting note data: {e}")
            return None

    def _extract_notes_from_sections(self, elf) -> List[Dict]:
        """Extract notes from note sections."""
        notes = []

        try:
            # Look for note sections
            for section in elf.iter_sections():
                if (section.name and
                    section.name.startswith('.note') and
                    hasattr(section, 'iter_notes')):

                    section_name = section.name
                    try:
                        for note in section.iter_notes():
                            note_data = self._extract_note_data(note, section_name)
                            if note_data:
                                notes.append(note_data)
                    except Exception as e:
                        self.log.debug(f"Could not process notes in section {section_name}: {e}")

        except Exception as e:
            self.log.error(f"Error extracting notes from sections: {e}")

        return notes

    def _extract_notes_from_segments(self, elf) -> List[Dict]:
        """Extract notes from PT_NOTE segments."""
        notes = []

        try:
            # Look for PT_NOTE segments
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_NOTE':
                    segment_name = f"PT_NOTE_segment_{segment.header.get('p_offset', 0)}"

                    try:
                        if hasattr(segment, 'iter_notes'):
                            for note in segment.iter_notes():
                                note_data = self._extract_note_data(note, segment_name)
                                if note_data:
                                    notes.append(note_data)
                    except Exception as e:
                        self.log.debug(f"Could not process notes in segment: {e}")

        except Exception as e:
            self.log.error(f"Error extracting notes from segments: {e}")

        return notes

    def tag(self):
        return Tag.ELF_NOTES.value if hasattr(Tag, 'ELF_NOTES') else "elf_notes"

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

            def extract_data(elf):
                all_notes = []

                # Extract notes from note sections
                section_notes = self._extract_notes_from_sections(elf)
                all_notes.extend(section_notes)

                # Extract notes from PT_NOTE segments
                segment_notes = self._extract_notes_from_segments(elf)
                all_notes.extend(segment_notes)

                # Remove duplicates (same note might appear in section and segment)
                unique_notes = []
                seen_notes = set()
                for note in all_notes:
                    note_key = (note.note_name, note.note_type, note.note_desc)
                    if note_key not in seen_notes:
                        seen_notes.add(note_key)
                        unique_notes.append(note)

                return unique_notes

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_notes = result
            return self.elf_notes

        except Exception as e:
            self.log.error(f"Error extracting ELF notes {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_notes
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no notes found
                # None is reserved for actual errors

                # Prepare data arrays for all notes
                data = []
                current_time = datetime.now(timezone.utc)
                for note in self.elf_notes:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        note.note_name,
                        note.note_type,
                        note.note_type_str,
                        note.note_desc,
                        note.note_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'note_name', 'note_type', 'note_type_str',
                    'note_desc', 'note_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)', 'UInt32', 'LowCardinality(String)',
                    'String CODEC(ZSTD(3))', 'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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