Maleknaz Nayebi

84 papers A 17B 4C 1Journal 47Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
Empir. Softw. Eng.
Faiz Ahmed, Xuchen Tan, Folajinmi Adewole, Suprakash Datta, Maleknaz Nayebi
2025 J jnl
Empir. Softw. Eng.
Umme Ayman Koana, Quang Hy Le, Shadikur Raman, Chris Carlson, Francis Chew, Maleknaz Nayebi
2025 J jnl
CoRR
Elmira Onagh, Maleknaz Nayebi
2025 J jnl
J. Syst. Softw.
Elmira Onagh, Maleknaz Nayebi
2025 J jnl
CoRR
Sk Golam Saroar, Waseefa Ahmed, Elmira Onagh, Maleknaz Nayebi
2025 A conf
ICPC
Federica Pepe, Claudia Farkas, Maleknaz Nayebi, Giuliano Antoniol, Massimiliano Di Penta
2025 J jnl
CoRR
Xuchen Tan, Deenu Yadav, Faiz Ahmed, Maleknaz Nayebi
2025 A conf
MSR
Faiz Ahmed, Xuchen Tan, Folajinmi Adewole, Suprakash Datta, Maleknaz Nayebi
2025 J jnl
CoRR
Faiz Ahmed, Xuchen Tan, Folajinmi Adewole, Suprakash Datta, Maleknaz Nayebi
2025 J jnl
Softw. Pract. Exp.
Xuchen Tan, Deenu Gengiti, Maleknaz Nayebi
2025 B conf
COMPSAC
Sharuka Promodya Thirimanne, Elim Yoseph Lemango, Giulio Antoniol, Maleknaz Nayebi
2025 J jnl
CoRR
Sharuka Promodya Thirimanne, Elim Yoseph Lemango, Giulio Antoniol, Maleknaz Nayebi
2025 A conf
MSR
Jiho Shin, Clark Tang, Tahmineh Mohati, Maleknaz Nayebi, Song Wang, Hadi Hemmati
2025 B conf
COMPSAC
Elmira Onagh, Alireza Davoodi, Maleknaz Nayebi
2025 J jnl
CoRR
Elmira Onagh, Alireza Davoodi, Maleknaz Nayebi
2024 J jnl
CoRR
Maleknaz Nayebi, Homayoon Farrahi, Guenther Ruhe
2024 J jnl
CoRR
Umme Ayman Koana, Quang Hy Le, Shadikur Rahman, Chris Carlson, Francis Chew, Maleknaz Nayebi
2024 J jnl
Empir. Softw. Eng.
Umme Ayman Koana, Quang Hy Le, Shadikur Raman, Chris Carlson, Francis Chew, Maleknaz Nayebi
2024 J jnl
CoRR
Sk Golam Saroar, Waseefa Ahmed, Elmira Onagh, Maleknaz Nayebi
2024 J jnl
Inf. Softw. Technol.
Sk Golam Saroar, Waseefa Ahmed, Elmira Onagh, Maleknaz Nayebi
2024 J jnl
J. Softw. Evol. Process.
Maleknaz Nayebi, Bram Adams
2024 J jnl
CoRR
Maleknaz Nayebi, Homayoon Farrahi, Ada Lee, Henry Cho, Guenther Ruhe
2024 A conf
ESEM
Faiz Ahmed, Suprakash Datta, Maleknaz Nayebi
2024 J jnl
CoRR
Faiz Ahmed, Suprakash Datta, Maleknaz Nayebi
2024 J jnl
CoRR
Maleknaz Nayebi, Konstantin Kuznetsov, Andreas Zeller, Guenther Ruhe
2024 J jnl
Requir. Eng.
Maleknaz Nayebi, Konstantin Kuznetsov, Andreas Zeller, Guenther Ruhe
2023 A conf
EASE
Sk Golam Saroar, Maleknaz Nayebi
2023 J jnl
CoRR
Sk Golam Saroar, Maleknaz Nayebi
2023 J jnl
CoRR
Maleknaz Nayebi, Bram Adams
2023 conf
REW
Shadikur Rahman, Faiz Ahmed, Maleknaz Nayebi
2023 J jnl
CoRR
Shadikur Rahman, Faiz Ahmed, Maleknaz Nayebi
2023 J jnl
CoRR
Umme Ayman Koana, Francis Chew, Chris Carlson, Maleknaz Nayebi
2023 conf
ESEC/SIGSOFT FSE
Umme Ayman Koana, Francis Chew, Chris Carlson, Maleknaz Nayebi
2023 J jnl
CoRR
Jiho Shin, Clark Tang, Tahmineh Mohati, Maleknaz Nayebi, Song Wang, Hadi Hemmati
2023 A conf
RE
Maleknaz Nayebi, Konstantin Kuznetsov, Andreas Zeller, Guenther Ruhe
2023 J jnl
CoRR
Maleknaz Nayebi, Konstantin Kuznetsov, Andreas Zeller, Guenther Ruhe
2022 A conf
ESEM
Shadikur Rahman, Umme Ayman Koana, Maleknaz Nayebi
2022 J jnl
CoRR
Shadikur Rahman, Umme Ayman Koana, Maleknaz Nayebi
2022 J jnl
CoRR
Sk Golam Saroar, Waseefa Ahmed, Maleknaz Nayebi
2022 J jnl
IEEE Trans. Software Eng.
Marco Kuhrmann, Paolo Tell, Regina Hebig, Jil Klünder, Jürgen Münch, Oliver Linssen, Dietmar Pfahl, Michael Felderer, Christian R. Prause, Stephen G. MacDonell, Joyce Nakatumba-Nabende, David Raffo, Sarah Beecham, Eray Tüzün, Gustavo López, Nicolás Paez, Diego Fontdevila, Sherlock A. Licorish, Steffen Küpper, Günther Ruhe, Eric Knauss, Özden Özcan-Top, Paul M. Clarke, Fergal McCaffery, Marcela Genero, Aurora Vizcaíno, Mario Piattini, Marcos Kalinowski, Tayana Conte, Rafael Prikladnicki, Stephan Krusche, Ahmet Coskunçay, Ezequiel Scott, Fabio Calefato, Svetlana Pimonova, Rolf-Helge Pfeiffer, Ulrik Pagh Schultz, Rogardt Heldal, Masud Fazal-Baqaie, Craig Anslow, Maleknaz Nayebi, Kurt Schneider, Stefan Sauer, Dietmar Winkler, Stefan Biffl, María Cecilia Bastarrica, Ita Richardson
2021 J jnl
IEEE Trans. Software Eng.
Maleknaz Nayebi, Guenther Ruhe, Thomas Zimmermann
2021 C conf
Software Engineering
Stefan Wagner, Daniel Méndez Fernández, Michael Felderer, Antonio Vetrò, Marcos Kalinowski, Roel J. Wieringa, Dietmar Pfahl, Tayana Conte, Marie-Therese Christiansson, Desmond Greer, Casper Lassenius, Tomi Männistö, Maleknaz Nayebi, Markku Oivo, Birgit Penzenstadler, Rafael Prikladnicki, Guenther Ruhe, André Schekelmann, Sagar Sen, Rodrigo O. Spínola, Ahmet Tuzcu, Jose Luis de la Vara, Dietmar Winkler
2021 J jnl
CoRR
Marco Kuhrmann, Paolo Tell, Regina Hebig, Jil Klünder, Jürgen Münch, Oliver Linssen, Dietmar Pfahl, Michael Felderer, Christian R. Prause, Stephen G. MacDonell, Joyce Nakatumba-Nabende, David Raffo, Sarah Beecham, Eray Tüzün, Gustavo López, Nicolás Paez, Diego Fontdevila, Sherlock A. Licorish, Steffen Küpper, Günther Ruhe, Eric Knauss, Özden Özcan-Top, Paul M. Clarke, Fergal McCaffery, Marcela Genero, Aurora Vizcaíno, Mario Piattini, Marcos Kalinowski, Tayana Conte, Rafael Prikladnicki, Stephan Krusche, Ahmet Coskunçay, Ezequiel Scott, Fabio Calefato, Svetlana Pimonova, Rolf-Helge Pfeiffer, Ulrik Pagh Schultz, Rogardt Heldal, Masud Fazal-Baqaie, Craig Anslow, Maleknaz Nayebi, Kurt Schneider, Stefan Sauer, Dietmar Winkler, Stefan Biffl, María Cecilia Bastarrica, Ita Richardson
2020 A conf
SANER
Yalda Hashemi, Maleknaz Nayebi, Giuliano Antoniol
2020 J jnl
CoRR
Yalda Hashemi, Maleknaz Nayebi, Giuliano Antoniol
2020 J jnl
CoRR
Maleknaz Nayebi
2020 conf
ICSE (NIER)
Maleknaz Nayebi
2019 conf
ICSE (SEIP)
Maleknaz Nayebi, Yuanfang Cai, Rick Kazman, Guenther Ruhe, Qiong Feng, Chris Carlson, Francis Chew
2019 J jnl
CoRR
Maleknaz Nayebi, Guenther Ruhe
2019 J jnl
IEEE Trans. Software Eng.
Maleknaz Nayebi, Guenther Ruhe
2019 conf
CASCON
Jessica Perrie, Jing Xie, Maleknaz Nayebi, Marios Fokaefs, Kelly A. Lyons, Eleni Stroulia
2019 conf
ICSE (SEIP)
Walid Maalej, Maleknaz Nayebi, Guenther Ruhe
2019 J jnl
Empir. Softw. Eng.
Maleknaz Nayebi, Liam Dicke, Ron Ittyipe, Chris Carlson, Guenther Ruhe
2019 J jnl
CoRR
Maleknaz Nayebi, Guenther Ruhe, Thomas Zimmermann
2019 ed.
WAMA@ESEC/SIGSOFT FSE
Federica Sarro, Maleknaz Nayebi
2019 J jnl
CoRR
Maleknaz Nayebi, Bram Adams, Guenther Ruhe
2019 J jnl
IEEE Softw.
Alexander Dekhtyar, Jane Huffman Hayes, Irit Hadar, Erin Combs, Alessio Ferrari, Sarah Gregory, Jennifer Horkoff, Meira Levy, Maleknaz Nayebi, Barbara Paech, Jared Payne, Matt Primrose, Paola Spoletini, Shell Clarke, Chuck Brophy, Daniel Amyot, Walid Maalej, Guenther Ruhe, Jane Cleland-Huang, Didar Zowghi
2019 J jnl
ACM Trans. Softw. Eng. Methodol.
Stefan Wagner, Daniel Méndez Fernández, Michael Felderer, Antonio Vetrò, Marcos Kalinowski, Roel J. Wieringa, Dietmar Pfahl, Tayana Conte, Marie-Therese Christiansson, Desmond Greer, Casper Lassenius, Tomi Männistö, Maleknaz Nayebi, Markku Oivo, Birgit Penzenstadler, Rafael Prikladnicki, Guenther Ruhe, André Schekelmann, Sagar Sen, Rodrigo O. Spínola, Ahmet Tuzcu, Jose Luis de la Vara, Dietmar Winkler
2018 J jnl
CoRR
Maleknaz Nayebi, Yuanfang Cai, Rick Kazman, Guenther Ruhe, Qiong Feng, Chris Carlson, Francis Chew
2018 A conf
MSR
Maleknaz Nayebi, Konstantin Kuznetsov, Paul Chen, Andreas Zeller, Guenther Ruhe
2018 J jnl
Empir. Softw. Eng.
Maleknaz Nayebi, Henry Cho, Guenther Ruhe
2018 A conf
RE
Maleknaz Nayebi
2018 J jnl
CoRR
Maleknaz Nayebi, Liam Dicke, Ron Ittyipe, Chris Carlson, Guenther Ruhe
2018 J jnl
IEEE Softw.
Maleknaz Nayebi, Shaikh Jeeshan Kabeer, Guenther Ruhe, Chris Carlson, Francis Chew
2018 A conf
RE
Jane Huffman Hayes, Maleknaz Nayebi, Alex Dekhtyar, Barbara Paech
2018 J jnl
CoRR
Stefan Wagner, Daniel Méndez Fernández, Michael Felderer, Antonio Vetrò, Marcos Kalinowski, Roel J. Wieringa, Dietmar Pfahl, Tayana Conte, Marie-Therese Christiansson, Desmond Greer, Casper Lassenius, Tomi Männistö, Maleknaz Nayebi, Markku Oivo, Birgit Penzenstadler, Rafael Prikladnicki, Guenther Ruhe, André Schekelmann, Sagar Sen, Rodrigo O. Spínola, Ahmet Tuzcu, Jose Luis de la Vara, Dietmar Winkler
2017 A conf
EASE
S. M. Didar Al Alam, Maleknaz Nayebi, Dietmar Pfahl, Guenther Ruhe
2017 conf
QRS Companion
Ashkan Hemmati, Chris Carlson, Maleknaz Nayebi, Guenther Ruhe, Chad Saunders
2017 conf
ICSE (Companion Volume)
Maleknaz Nayebi, Homayoon Farrahi, Guenther Ruhe, Henry Cho
2017 conf
ICSE-SEIS
Maleknaz Nayebi, Mahshid Marbouti, Rache Quapp, Frank Maurer, Guenther Ruhe
2017 A conf
RE
Maleknaz Nayebi, Guenther Ruhe
2017 A conf
ESEM
Shaikh Jeeshan Kabeer, Maleknaz Nayebi, Guenther Ruhe, Chris Carlson, Francis Chew
2017 A conf
RE
Guenther Ruhe, Maleknaz Nayebi, Christof Ebert
2017 A conf
ESEM
Maleknaz Nayebi, Homayoon Farrahi, Guenther Ruhe
2016 conf
WAMA@SIGSOFT FSE
Maleknaz Nayebi, Homayoon Farrahi, Ada Lee, Henry Cho, Guenther Ruhe
2016 A conf
SANER
Maleknaz Nayebi, Bram Adams, Guenther Ruhe
2016 J jnl
IEEE Softw.
Walid Maalej, Maleknaz Nayebi, Timo Johann, Guenther Ruhe
2016 ch.
Perspectives on Data Science for Software Engineering
Günther Ruhe, Maleknaz Nayebi
2015 ch.
The Art and Science of Analyzing Software Data
Maleknaz Nayebi, Guenther Ruhe
2015 conf
ASE Workshops
Maleknaz Nayebi, Guenther Ruhe, Roberta Cabral Mota, Mujeeb Mufti
2015 B conf
ICSSP
Maleknaz Nayebi, Krzysztof Wnuk
2015 J jnl
PeerJ Prepr.
Maleknaz Nayebi, Guenther Ruhe
2014 B conf
CHASE
Maleknaz Nayebi, Günther Ruhe
2014 conf
ICSOB
Maleknaz Nayebi, Günther Ruhe
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"