Carlos Pedrinaci

71 papers A 3B 3Misc 1Journal 10Unranked 50
YearRankTypeTitle / Venue / Authors
2018 A conf
ICWS
Georgia M. Kapitsaki, Joseph Ioannou, Jorge Cardoso, Carlos Pedrinaci
2017 J jnl
IEEE Trans. Serv. Comput.
José María García, Pablo Fernandez, Carlos Pedrinaci, Manuel Resinas, Jorge Cardoso, Antonio Ruiz Cortés
2016 J jnl
IEEE Trans. Serv. Comput.
Pablo Rodríguez-Mier, Carlos Pedrinaci, Manuel Lama, Manuel Mucientes
2016 J jnl
J. Biomed. Informatics
Luis Marco-Ruiz, Carlos Pedrinaci, José Alberto Maldonado, Luca Panziera, Rong Chen, Johan Gustav Bellika
2015 conf
SALAD@ESWC
Enrico Daga, Luca Panziera, Carlos Pedrinaci
2015 J jnl
CoRR
Pablo Rodríguez-Mier, Carlos Pedrinaci, Manuel Lama, Manuel Mucientes
2015 conf
ISWC (Posters & Demos)
Enrico Daga, Luca Panziera, Carlos Pedrinaci
2015 conf
IESS
Jorge Cardoso, Carlos Pedrinaci
2015 J jnl
CoRR
George Gkotsis, Maria Liakata, Carlos Pedrinaci, John Domingue
2015 A conf
ICWS
José María García, Carlos Pedrinaci, Manuel Resinas, Jorge Cardoso, Pablo Fernandez, Antonio Ruiz Cortés
2015 conf
ANT/SEIT
Álvaro Villalba, Juan Luis Pérez, David Carrera, Carlos Pedrinaci, Luca Panziera
2014 conf
WebSci
George Gkotsis, Karen Stepanyan, Carlos Pedrinaci, John Domingue, Maria Liakata
2014 B conf
ESWC
Carlos Pedrinaci, Jorge Cardoso, Torsten Leidig
2013 conf
AINA Workshops
Benny Mandler, Fabio Antonelli, Robert Kleinfeld, Carlos Pedrinaci, David Carrera, Alessio Gugliotta, Daniel Schreckling, Iacopo Carreras, Dave Raggett, Marc Pous, Carmen Vicente Villares, Vlad Trifa
2013 J jnl
Int. J. Serv. Sci. Manag. Eng. Technol.
Jorge Cardoso, Carlos Pedrinaci, Torsten Leidig, Paulo Rupino, Pieter De Leenheer
2013 conf
IESS
Pieter De Leenheer, Jorge Cardoso, Carlos Pedrinaci
2013 conf
IESS
Jorge Cardoso, Carlos Pedrinaci, Pieter De Leenheer
2012 B conf
WISE
Papa Alioune Ly, Carlos Pedrinaci, John Domingue
2012 conf
ESOCC
Pierre De Vettor, Michael Mrissa, Carlos Pedrinaci
2012 conf
ISWC (1)
Chenghua Lin, Yulan He, Carlos Pedrinaci, John Domingue
2012 conf
AAAI Spring Symposium: Intelligent Web Services Meet Social Computing
Carlos Pedrinaci, Dong Liu, Chenghua Lin, John Domingue
2012 ch.
Handbook of Service Description
Keith Duddy, Matthias Heinrich, Steffen Heinzl, Martin Knechtel, Carlos Pedrinaci, Benjamin Schmeling, Virginia Smith
2012 ch.
Handbook of Service Description
Carlos Pedrinaci, Maria Maleshkova, Maciej Zaremba, Maryam Panahiazar
2012 J jnl
IEEE Trans. Learn. Technol.
Hong Qing Yu, Carlos Pedrinaci, Stefan Dietze, John Domingue
2011 conf
Linked Learning@ESWC
Hong Qing Yu, Stefan Dietze, Ning Li, Carlos Pedrinaci, Davide Taibi, Nikolas Dovrolis, Teodor Stefanut, Eleni Kaldoudi, John Domingue
2011 conf
ICWE Workshops
Dong Liu, Ning Li, Carlos Pedrinaci, Jacek Kopecký, Maria Maleshkova, John Domingue
2011 conf
ICWE Workshops
Maria Maleshkova, Carlos Pedrinaci, Dong Liu, Guillermo Alvaro Rey
2011 conf
MSW
Maria Maleshkova, Lukás Zilka, Petr Knoth, Carlos Pedrinaci
2011 conf
Future Internet Assembly
John Domingue, Carlos Pedrinaci, Maria Maleshkova, Barry Norton, Reto Krummenacher
2011 conf
ICSOC Workshops
Flavio De Paoli, Ioan Toma, Carlos Pedrinaci, Marcel Tilly
2011 conf
SOCA
Maria Maleshkova, Carlos Pedrinaci, Ning Li, Jacek Kopecký, John Domingue
2011 conf
ICSC
Ning Li, Carlos Pedrinaci, Maria Maleshkova, Jacek Kopecký, John Domingue
2011 ch.
REST: From Research to Practice
Jacek Kopecký, Tomas Vitvar, Carlos Pedrinaci, Maria Maleshkova
2011 ch.
Handbook of Semantic Web Technologies
Carlos Pedrinaci, John Domingue, Amit P. Sheth
2011 conf
ESWC (2)
Stefan Dietze, Hong Qing Yu, Carlos Pedrinaci, Dong Liu, John Domingue
2011 conf
Euro-Par Workshops (1)
Siegfried Benkner, Jesus Bisbal, Gerhard Engelbrecht, Rod D. Hose, Yuriy Kaniovskyi, Martin Koehler, Carlos Pedrinaci, Steven Wood
2010 conf
COLD
Dong Liu, Carlos Pedrinaci, John Domingue
2010 conf
SMRR@ISWC
Stefan Dietze, Neil Benn, Hong Qing Yu, Carlos Pedrinaci, Bassem Makni, Dong Liu, David Lambert, John Domingue
2010 conf
ECOWS
Maria Maleshkova, Carlos Pedrinaci, John Domingue
2010 conf
LDSI@FIA
Carlos Pedrinaci, John Domingue
2010 conf
Future Internet Assembly
Reto Krummenacher, John Domingue, Carlos Pedrinaci, Elena Simperl
2010 conf
SFSW
Maria Maleshkova, Carlos Pedrinaci, John Domingue
2010 conf
AAAI Spring Symposium: Linked Data Meets Artificial Intelligence
Carlos Pedrinaci, John Domingue, Reto Krummenacher
2010 conf
ServiceWave
Alistair Duke, Sandra Stincic, John Davies, Guillermo Alvaro Rey, Carlos Pedrinaci, Maria Maleshkova, John Domingue, Dong Liu, Freddy Lécué, Nikolay Mehandjiev
2010 J jnl
J. Univers. Comput. Sci.
Carlos Pedrinaci, John Domingue
2010 A conf
ICWS
Hong Qing Yu, Neil Benn, Stefan Dietze, Carlos Pedrinaci, Dong Liu, John Domingue, Ronald Siebes
2010 conf
EKAW (Posters and Demos)
Stefan Dietze, Neil Benn, Hong Qing Yu, Carlos Pedrinaci, Ronald Siebes, Dong Liu, John Domingue
2010 conf
ISWC (1)
Maria Maleshkova, Carlos Pedrinaci, John Domingue, Guillermo Alvaro Rey, Ivan Martinez
2009 conf
OTM Workshops
Maria Maleshkova, Jacek Kopecký, Carlos Pedrinaci
2009 conf
ICSOC/ServiceWave Workshops
Adrian Mos, Carlos Pedrinaci, Guillermo Alvaro Rey, José Manuel Gómez, Dong Liu, Guillaume Vaudaux-Ruth, Samuel Quaireau
2009 conf
SBPM@ESWC
Carlos Pedrinaci, John Domingue
2009 conf
ICSC
Reto Krummenacher, Barry Norton, Elena Simperl, Carlos Pedrinaci
2009 conf
SBPM@ESWC
Dong Liu, Carlos Pedrinaci, John Domingue
2009 conf
BIS
Carlos Pedrinaci, Ivan Markovic, Florian Hasibether, John Domingue
2009 conf
Future Internet Assembly
John Domingue, Dieter Fensel, John Davies, Rafael González-Cabero, Carlos Pedrinaci
2008 B conf
ESWC
Carlos Pedrinaci, John Domingue, Ana Karla Alves de Medeiros
2008 conf
ASWC
Stefania Galizia, Alessio Gugliotta, Carlos Pedrinaci
2008 J jnl
J. Web Semant.
John Domingue, Liliana Cabral, Stefania Galizia, Vlad Tanasescu, Alessio Gugliotta, Barry Norton, Carlos Pedrinaci
2008 conf
OBI
Carlos Pedrinaci, David Lambert, Branimir Wetzstein, Tammo van Lessen, Luchesar Cekov, Marin Dimitrov
2008 conf
ICSC
Carlos Pedrinaci, John Domingue, Christian Brelage, Tammo van Lessen, Dimka Karastoyanova, Frank Leymann
2008 J jnl
it Inf. Technol.
Barry Norton, Carlos Pedrinaci, John Domingue, Michal Zaremba
2008 conf
ECIS
Ana Karla Alves de Medeiros, Wil M. P. van der Aalst, Carlos Pedrinaci
2007 conf
OTM Workshops (2)
Ana Karla Alves de Medeiros, Carlos Pedrinaci, Wil M. P. van der Aalst, John Domingue, Minseok Song, Anne Rozinat, Barry Norton, Liliana Cabral
2007 conf
SWAP
Stefania Galizia, Alessio Gugliotta, Carlos Pedrinaci, John Domingue
2007 conf
New Forms of Reasoning for the Semantic Web
Carlos Pedrinaci, Tim Smithers, Amaia Bernaras
2007 conf
SBPM
Carlos Pedrinaci, John Domingue
2006 conf
OTM Workshops (1)
Barry Norton, Carlos Pedrinaci
2006 Misc conf
ISWC
Liliana Cabral, John Domingue, Stefania Galizia, Alessio Gugliotta, Vlad Tanasescu, Carlos Pedrinaci, Barry Norton
2005 conf
EC-Web
Carlos Pedrinaci, Ziv Baida, Hans Akkermans, Amaia Bernaras, Jaap Gordijn, Tim Smithers
2005 conf
SWAP
Carlos Pedrinaci, Tim Smithers, Amaia Bernaras
2003 conf
CAEPIA
Carlos Pedrinaci, Amaia Bernaras, Tim Smithers, Jessica Aguado, Manuel Cendoya
redb/extractors/elf_extractors/elf_symbols.py
← Index redb/extractors/elf_extractors/elf_symbols.py python
import inspect
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 ELFSymbol


class ELFSymbolExtractor(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_symbols = []
        self.elastic_index = self.index_prefix + "-elf_symbols"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _map_symbol_type(self, st_type_str: str) -> int:
        """Map symbol type string to enum value."""
        type_map = {
            'STT_NOTYPE': 0,
            'STT_OBJECT': 1,
            'STT_FUNC': 2,
            'STT_SECTION': 3,
            'STT_FILE': 4,
            'STT_COMMON': 5,
            'STT_TLS': 6
        }
        return type_map.get(st_type_str, 0)

    def _map_symbol_bind(self, st_bind_str: str) -> int:
        """Map symbol binding string to enum value."""
        bind_map = {
            'STB_LOCAL': 0,
            'STB_GLOBAL': 1,
            'STB_WEAK': 2
        }
        return bind_map.get(st_bind_str, 0)

    def _map_symbol_visibility(self, st_vis_str: str) -> int:
        """Map symbol visibility string to enum value."""
        vis_map = {
            'STV_DEFAULT': 0,
            'STV_INTERNAL': 1,
            'STV_HIDDEN': 2,
            'STV_PROTECTED': 3
        }
        return vis_map.get(st_vis_str, 0)

    def _extract_symbol_data(self, symbol, is_dynamic: bool = False) -> Dict:
        """Extract data from a single symbol."""
        try:
            # Get symbol name (handle empty names)
            symbol_name = symbol.name if symbol.name else f"<unnamed_{symbol.entry.get('st_name', 0)}>"

            # Get symbol properties
            symbol_value = symbol.entry.get('st_value', 0)
            symbol_size = symbol.entry.get('st_size', 0)

            # Handle section index - can be integer or special string like 'SHN_UNDEF'
            st_shndx_raw = symbol.entry.get('st_shndx', 0)
            if isinstance(st_shndx_raw, str):
                # Map special section index strings to integers
                shndx_map = {
                    'SHN_UNDEF': 0,
                    'SHN_ABS': 65521,  # 0xFFF1
                    'SHN_COMMON': 65522,  # 0xFFF2
                    'SHN_XINDEX': 65535,  # 0xFFFF
                }
                symbol_section_index = shndx_map.get(st_shndx_raw, 0)
                symbol_section_index_str = st_shndx_raw.replace('SHN_', '') if st_shndx_raw.startswith('SHN_') else st_shndx_raw
            else:
                symbol_section_index = st_shndx_raw
                symbol_section_index_str = str(st_shndx_raw)

            # Get symbol type and map to enum
            st_type_str = symbol.entry.get('st_info', {}).get('type', 'STT_NOTYPE')
            symbol_type_enum = self._map_symbol_type(st_type_str)
            symbol_type_str = st_type_str.replace('STT_', '') if st_type_str.startswith('STT_') else st_type_str

            # Get symbol binding and map to enum
            st_bind_str = symbol.entry.get('st_info', {}).get('bind', 'STB_LOCAL')
            symbol_bind_enum = self._map_symbol_bind(st_bind_str)
            symbol_bind_str = st_bind_str.replace('STB_', '') if st_bind_str.startswith('STB_') else st_bind_str

            # Get symbol visibility and map to enum
            st_vis_str = symbol.entry.get('st_other', {}).get('visibility', 'STV_DEFAULT')
            symbol_visibility_enum = self._map_symbol_visibility(st_vis_str)
            symbol_visibility_str = st_vis_str.replace('STV_', '') if st_vis_str.startswith('STV_') else st_vis_str

            return ELFSymbol(
                symbol_name=symbol_name,
                symbol_value=symbol_value,
                symbol_size=symbol_size,
                symbol_type=symbol_type_enum,
                symbol_type_str=symbol_type_str,
                symbol_bind=symbol_bind_enum,
                symbol_bind_str=symbol_bind_str,
                symbol_visibility=symbol_visibility_enum,
                symbol_visibility_str=symbol_visibility_str,
                symbol_section_index=symbol_section_index,
                symbol_section_index_str=symbol_section_index_str,
                is_dynamic=1 if is_dynamic else 0
            )

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

    def _extract_symbols_from_section(self, elf, section_name: str, is_dynamic: bool = False) -> List[Dict]:
        """Extract symbols from a specific symbol table section."""
        symbols = []

        try:
            section = elf.get_section_by_name(section_name)
            if not section:
                self.log.debug(f"No {section_name} section found")
                return symbols

            if not hasattr(section, 'iter_symbols'):
                self.log.debug(f"Section {section_name} is not a symbol table")
                return symbols

            # Iterate through symbols in the section with per-symbol error handling
            for symbol_index, symbol in enumerate(section.iter_symbols()):
                try:
                    symbol_data = self._extract_symbol_data(symbol, is_dynamic)
                    if symbol_data:
                        symbols.append(symbol_data)
                except Exception as e:
                    self.log.warning(f"Error processing symbol {symbol_index} in {section_name}: {e}")
                    # Continue with other symbols

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

        return symbols

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

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

            def extract_data(elf):
                all_symbols = []

                # Extract static symbols from .symtab with individual error handling
                try:
                    static_symbols = self._extract_symbols_from_section(elf, '.symtab', is_dynamic=False)
                    all_symbols.extend(static_symbols)
                    self.log.debug(f"Extracted {len(static_symbols)} static symbols from .symtab")
                except Exception as e:
                    self.log.warning(f"Error extracting static symbols from .symtab: {e}")

                # Extract dynamic symbols from .dynsym with individual error handling
                try:
                    dynamic_symbols = self._extract_symbols_from_section(elf, '.dynsym', is_dynamic=True)
                    all_symbols.extend(dynamic_symbols)
                    self.log.debug(f"Extracted {len(dynamic_symbols)} dynamic symbols from .dynsym")
                except Exception as e:
                    self.log.warning(f"Error extracting dynamic symbols from .dynsym: {e}")

                return all_symbols

            if not self._is_elf_file():
                return None

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

            self.elf_symbols = result
            return self.elf_symbols

        except Exception as e:
            self.log.error(f"Error extracting ELF symbols {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_symbols
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no symbols (e.g., stripped binary)
                # None is reserved for actual errors

                # Prepare data arrays for all symbols
                data = []
                current_time = datetime.now(timezone.utc)
                for symbol in self.elf_symbols:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        symbol.symbol_name,
                        symbol.symbol_value,
                        symbol.symbol_size,
                        symbol.symbol_type,
                        symbol.symbol_type_str,
                        symbol.symbol_bind,
                        symbol.symbol_bind_str,
                        symbol.symbol_visibility,
                        symbol.symbol_visibility_str,
                        symbol.symbol_section_index,
                        symbol.symbol_section_index_str,
                        symbol.is_dynamic,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'symbol_name', 'symbol_value', 'symbol_size',
                    'symbol_type', 'symbol_type_str',
                    'symbol_bind', 'symbol_bind_str',
                    'symbol_visibility', 'symbol_visibility_str',
                    'symbol_section_index', 'symbol_section_index_str', 'is_dynamic',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)', 'UInt64', 'UInt64',
                    "Enum8('NOTYPE'=0, 'OBJECT'=1, 'FUNC'=2, 'SECTION'=3, 'FILE'=4, 'COMMON'=5, 'TLS'=6)",
                    'LowCardinality(String)',
                    "Enum8('LOCAL'=0, 'GLOBAL'=1, 'WEAK'=2)",
                    'LowCardinality(String)',
                    "Enum8('DEFAULT'=0, 'INTERNAL'=1, 'HIDDEN'=2, 'PROTECTED'=3)",
                    'LowCardinality(String)',
                    'UInt16', 'LowCardinality(String)', 'UInt8',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                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_symbols"