Maged M. Dessouky

65 papers A 1B 2Misc 3Journal 55Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Ind. Eng.
Han Yu, Suyanpeng Zhang, Sze-Chuan Suen, Maged M. Dessouky, Fernando Ordóñez
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Ali Ghafelebashi, Meisam Razaviyayn, Maged M. Dessouky
2023 J jnl
CoRR
Ali Ghafelebashi, Meisam Razaviyayn, Maged M. Dessouky
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Aristotelis-Angelos Papadopoulos, Ioannis Kordonis, Maged M. Dessouky, Petros A. Ioannou
2023 J jnl
EURO J. Transp. Logist.
Zheyu Wang, Maged M. Dessouky, Tom Van Woensel, Petros A. Ioannou
2022 J jnl
Transp. Sci.
Wentao Zhang, Nelson A. Uhan, Maged M. Dessouky, Alejandro Toriello
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Pengfei Chen, Petros A. Ioannou, Maged M. Dessouky
2020 J jnl
Comput. Ind. Eng.
Yihuan Shao, Maged M. Dessouky
2020 J jnl
IEEE Trans. Intell. Transp. Syst.
Ioannis Kordonis, Maged M. Dessouky, Petros A. Ioannou
2019 conf
ECC
Aristotelis-Angelos Papadopoulos, Maged M. Dessouky, Petros A. Ioannou, Ioannis Kordonis
2019 J jnl
IEEE Trans. Intell. Transp. Syst.
Aristotelis-Angelos Papadopoulos, Ioannis Kordonis, Maged M. Dessouky, Petros A. Ioannou
2019 J jnl
IEEE Trans. Intell. Transp. Syst.
Yanbo Zhao, Petros A. Ioannou, Maged M. Dessouky
2019 J jnl
CoRR
Aristotelis-Angelos Papadopoulos, Ioannis Kordonis, Maged M. Dessouky, Petros A. Ioannou
2019 J jnl
Comput. Ind. Eng.
Maged M. Dessouky, Lixing Yang, Shukai Li
2019 J jnl
Comput. Ind. Eng.
Liang Liu, Maged M. Dessouky
2018 J jnl
J. Sched.
Lunce Fu, Maged M. Dessouky
2018 J jnl
Eur. J. Oper. Res.
Weihong Hu, Alejandro Toriello, Maged M. Dessouky
2017 J jnl
Comput. Oper. Res.
Liang Liu, Maged M. Dessouky
2017 conf
ITSC
Yanbo Zhao, Petros A. Ioannou, Maged M. Dessouky
2017 J jnl
Comput. Ind. Eng.
Lunce Fu, Maged M. Dessouky
2016 J jnl
Eur. J. Oper. Res.
William B. Haskell, Lunce Fu, Maged M. Dessouky
2016 J jnl
IEEE Trans. Intell. Transp. Syst.
Afshin Abadi, Petros A. Ioannou, Maged M. Dessouky
2016 J jnl
Comput. Ind. Eng.
Yingzhen Chen, Qiuhong Zhao, Lei Wang, Maged M. Dessouky
2015 J jnl
Electron. Notes Discret. Math.
Feng Ye, Qiuhong Zhao, Menghao Xi, Maged M. Dessouky
2015 J jnl
IEEE Trans. Intell. Transp. Syst.
Masabumi Furuhata, Kenny Daniel, Sven Koenig, Fernando Ordóñez, Maged M. Dessouky, Marc-Etienne Brunet, Liron Cohen, Xiaoqing Wang
2015 J jnl
INFOR Inf. Syst. Oper. Res.
Chen Wang, Maged M. Dessouky, Fernando Ordóñez
2014 A conf
AAMAS
Masabumi Furuhata, Liron Cohen, Sven Koenig, Maged M. Dessouky, Fernando Ordóñez
2014 J jnl
Comput. Ind. Eng.
Yen-Ming Lee, Shi Mu, Zhihong Shen, Maged M. Dessouky
2013 J jnl
Interfaces
Christine Nguyen, Alejandro Toriello, Maged M. Dessouky, James E. Moore II
2013 J jnl
Comput. Ind. Eng.
Geun-wan Park, Kwangtae Park, Maged M. Dessouky
2012 J jnl
Comput. Ind. Eng.
Stephen J. Stoyan, Maged M. Dessouky
2011 J jnl
J. Oper. Res. Soc.
Zhihong Shen, Maged M. Dessouky, Fernando Ordóñez
2010 J jnl
Transp. Sci.
Ilgaz Sungur, Yingtao Ren, Fernando Ordóñez, Maged M. Dessouky, Hongsheng Zhong
2010 J jnl
Comput. Ind. Eng.
Mohamed A. A. Mansour, Maged M. Dessouky
2010 J jnl
Comput. Oper. Res.
Yingtao Ren, Maged M. Dessouky, Fernando Ordóñez
2009 J jnl
J. Oper. Res. Soc.
B. Zhang, P. Murali, Maged M. Dessouky, D. Belson
2009 J jnl
Networks
Zhihong Shen, Maged M. Dessouky, Fernando Ordóñez
2009 J jnl
Comput. Ind. Eng.
Tamer F. Abdelmaguid, Maged M. Dessouky, Fernando Ordóñez
2008 B conf
CPAIOR
Luca Quadrifoglio, Maged M. Dessouky, Fernando Ordóñez
2008 J jnl
Eur. J. Oper. Res.
Luca Quadrifoglio, Maged M. Dessouky, Fernando Ordóñez
2008 J jnl
IEEE Trans. Intell. Transp. Syst.
Hossein Jula, Maged M. Dessouky, Petros A. Ioannou
2007 J jnl
J. Sched.
Luca Quadrifoglio, Maged M. Dessouky, Kurt Palmer
2007 J jnl
Comput. Ind. Eng.
Hongzhong Jia, Fernando Ordóñez, Maged M. Dessouky
2007 J jnl
Transp. Sci.
Hongsheng Zhong, Randolph W. Hall, Maged M. Dessouky
2006 J jnl
Eur. J. Oper. Res.
Quan Lu, Maged M. Dessouky
2006 J jnl
Transp. Sci.
Jiamin Zhao, Maged M. Dessouky, Satish T. S. Bukkapatnam
2006 J jnl
Transp. Sci.
Luca Quadrifoglio, Randolph W. Hall, Maged M. Dessouky
2006 J jnl
IEEE Trans. Intell. Transp. Syst.
Hossein Jula, Maged M. Dessouky, Petros A. Ioannou
2005 J jnl
Transp. Sci.
Jürgen Branke, Martin Middendorf, Guntram Noeth, Maged M. Dessouky
2004 J jnl
Transp. Sci.
Quan Lu, Maged M. Dessouky
2004 J jnl
Syst. Eng.
Clifford Kelley, Maged M. Dessouky
2004 J jnl
ACM Trans. Model. Comput. Simul.
Quan Lu, Maged M. Dessouky, Robert C. Leachman
2003 J jnl
IEEE Trans. Intell. Transp. Syst.
Jiamin Zhao, Satish T. S. Bukkapatnam, Maged M. Dessouky
2003 J jnl
Comput. Ind. Eng.
Majid Aldaihani, Maged M. Dessouky
2002 conf
DG.O
Kurt Palmer, Maged M. Dessouky, Tamer F. Abdelmaguid
2002 Misc conf
WSC
Maged M. Dessouky, Quan Lu, Robert C. Leachman
2001 J jnl
J. Intell. Transp. Syst.
Mansour Rahimi, Maged M. Dessouky
2000 conf
WebNet
Edward John Kazlauskas, Maged M. Dessouky, Jeff Rickel, W. Lewis Johnson
1999 J jnl
J. Intell. Manuf.
Chell A. Roberts, Maged M. Dessouky, Yasser M. Dessouky
1998 J jnl
Eur. J. Oper. Res.
Maged M. Dessouky, Mohamed I. Dessouky, Sushil K. Verma
1998 B conf
SMC
Maged M. Dessouky, Stefan Adam
1998 J jnl
Math. Oper. Res.
Sushil K. Verma, Maged M. Dessouky
1995 J jnl
Simul.
Maged M. Dessouky, Robert C. Leachman
1987 Misc conf
WSC
Paul C. Caruso, Maged M. Dessouky
1985 Misc conf
WSC
Hank Grant, Maged M. Dessouky, Dan Gauthier
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"