Oliver Kosut

158 papers A* 2B 45Misc 4Journal 89Unranked 18
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Atefeh Gilani, Carol Xuan Long, Sajani Vithana, Oliver Kosut, Lalitha Sankar, Flávio P. Calmon
2025 J jnl
CoRR
Anand D. Sarwate, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2025 J jnl
CoRR
Atefeh Gilani, Naima Tasnim, Lalitha Sankar, Oliver Kosut
2025 J jnl
CoRR
Abed AlRahman Al Makdah, Oliver Kosut, Lalitha Sankar, Shaofeng Zou
2025 J jnl
CoRR
Atefeh Gilani, Juan Felipe Gómez, Shahab Asoodeh, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2025 A* conf
ICML
Atefeh Gilani, Juan Felipe Gómez, Shahab Asoodeh, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2025 B conf
ITW
Naima Tasnim, Atefeh Gilani, Lalitha Sankar, Oliver Kosut
2025 J jnl
CoRR
Naima Tasnim, Atefeh Gilani, Lalitha Sankar, Oliver Kosut
2025 J jnl
Trans. Mach. Learn. Res.
Abrar Zahin, Rajasekhar Anguluri, Lalitha Sankar, Oliver Kosut, Gautam Dasarathy
2025 B conf
ISIT
Oliver Kosut, Michael Langberg, Michelle Effros
2025 J jnl
CoRR
Oliver Kosut, Michael Langberg, Michelle Effros
2024 conf
SmartGridComm
Obai Bahwal, Oliver Kosut, Lalitha Sankar
2024 J jnl
CoRR
Obai Bahwal, Oliver Kosut, Lalitha Sankar
2024 J jnl
IEEE Trans. Inf. Theory
Gowtham R. Kurri, Lalitha Sankar, Oliver Kosut
2024 B conf
ISIT
Wael Alghamdi, Shahab Asoodeh, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2024 J jnl
IEEE Control. Syst. Lett.
Rajasekhar Anguluri, Oliver Kosut, Lalitha Sankar
2024 J jnl
CoRR
Joel Mathias, Rajasekhar Anguluri, Oliver Kosut, Lalitha Sankar
2024 B conf
ISIT
Oliver Kosut, Michelle Effros, Michael Langberg
2024 J jnl
CoRR
Oliver Kosut, Michelle Effros, Michael Langberg
2024 J jnl
IEEE Trans. Inf. Theory
Atefeh Gilani, Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2024 J jnl
CoRR
Mayank Bakshi, Sara Ghasvarianjahromi, Yauhen Yakimenka, Allison Beemer, Oliver Kosut, Jörg Kliewer
2024 B conf
ISIT
Mayank Bakshi, Sara Ghasvarianjahromi, Yauhen Yakimenka, Allison Beemer, Oliver Kosut, Jörg Kliewer
2023 J jnl
CoRR
Atefeh Gilani, Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2023 J jnl
CoRR
Nima Taghipourbazargani, Lalitha Sankar, Oliver Kosut
2023 J jnl
IEEE Access
Caspar von Lengerke, Alexander Hefele, Juan A. Cabrera, Oliver Kosut, Martin Reisslein, Frank H. P. Fitzek
2023 J jnl
IEEE Trans. Inf. Theory
Eric Graves, Allison Beemer, Jörg Kliewer, Oliver Kosut, Paul L. Yu
2023 J jnl
IEEE Trans. Control. Netw. Syst.
Rajasekhar Anguluri, Oliver Kosut, Lalitha Sankar
2023 B conf
ISIT
Mayank Bakshi, Oliver Kosut
2023 J jnl
CoRR
Mayank Bakshi, Oliver Kosut
2023 B conf
ISIT
Wael Alghamdi, Shahab Asoodeh, Flávio P. Calmon, Juan Felipe Gómez, Oliver Kosut, Lalitha Sankar
2023 B conf
ISIT
Oliver Kosut, Michelle Effros, Michael Langberg
2023 J jnl
CoRR
Oliver Kosut, Michelle Effros, Michael Langberg
2023 B conf
ISIT
Wael Alghamdi, Shahab Asoodeh, Flávio P. Calmon, Juan Felipe Gómez, Oliver Kosut, Lalitha Sankar
2023 conf
CCTA
Rajasekhar Anguluri, Nima Taghipourbazargani, Oliver Kosut, Lalitha Sankar
2023 A* conf
ICML
Wael Alghamdi, Juan Felipe Gómez, Shahab Asoodeh, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2022 J jnl
CoRR
Nima T. Bazargani, Gautam Dasarathy, Lalitha Sankar, Oliver Kosut
2022 J jnl
IEEE Trans. Inf. Theory
Oliver Kosut
2022 B conf
ISIT
Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2022 J jnl
CoRR
Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2022 B conf
ITW
Atefeh Gilani, Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2022 J jnl
CoRR
Atefeh Gilani, Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2022 J jnl
CoRR
Gowtham R. Kurri, Lalitha Sankar, Oliver Kosut
2022 B conf
ISIT
Wael Alghamdi, Shahab Asoodeh, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar, Fei Wei
2022 J jnl
CoRR
Wael Alghamdi, Shahab Asoodeh, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar, Fei Wei
2022 J jnl
IEEE Control. Syst. Lett.
Anguluri Rajasekhar, Gautam Dasarathy, Oliver Kosut, Lalitha Sankar
2022 B conf
ISIT
Oliver Kosut, Michelle Effros, Michael Langberg
2022 J jnl
CoRR
Oliver Kosut, Michelle Effros, Michael Langberg
2022 J jnl
CoRR
Anguluri Rajasekhar, Lalitha Sankar, Oliver Kosut
2022 J jnl
CoRR
Abrar Zahin, Rajasekhar Anguluri, Oliver Kosut, Lalitha Sankar, Gautam Dasarathy
2022 J jnl
CoRR
Wael Alghamdi, Shahab Asoodeh, Flávio P. Calmon, Juan Felipe Gómez, Oliver Kosut, Lalitha Sankar, Fei Wei
2021 J jnl
CoRR
Zhigang Chu, Andrea Pinceti, Ramin Kaviani, Roozbeh Khodadadeh, Xingpeng Li, Jiazi Zhang, Karthik Saikumar, Mostafa Sahraei-Ardakani, Christopher Mosier, Robin Podmore, Kory W. Hedman, Oliver Kosut, Lalitha Sankar
2021 B conf
ISIT
Fei Wei, Oliver Kosut
2021 J jnl
CoRR
Fatemeh Hosseinigoki, Oliver Kosut
2021 B conf
ISIT
Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2021 J jnl
CoRR
Gowtham R. Kurri, Oliver Kosut, Lalitha Sankar
2021 B conf
ISIT
Oliver Kosut, Michelle Effros, Michael Langberg
2021 J jnl
CoRR
Oliver Kosut, Michelle Effros, Michael Langberg
2021 J jnl
CoRR
Andrea Pinceti, Lalitha Sankar, Oliver Kosut
2021 J jnl
CoRR
Eric Graves, Allison Beemer, Jörg Kliewer, Oliver Kosut, Paul L. Yu
2021 J jnl
CoRR
Andrea Pinceti, Lalitha Sankar, Oliver Kosut
2021 J jnl
IEEE J. Sel. Areas Inf. Theory
Shahab Asoodeh, Jiachun Liao, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2020 J jnl
CoRR
Shahab Asoodeh, Jiachun Liao, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2020 B conf
ISIT
Shahab Asoodeh, Jiachun Liao, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2020 J jnl
CoRR
Oliver Kosut
2020 J jnl
CoRR
Allison Beemer, Eric Graves, Jörg Kliewer, Oliver Kosut, Paul L. Yu
2020 conf
CNS
Allison Beemer, Eric Graves, Jörg Kliewer, Oliver Kosut, Paul L. Yu
2020 B conf
ISIT
Allison Beemer, Eric Graves, Jörg Kliewer, Oliver Kosut, Paul L. Yu
2020 B conf
ISIT
Fatemeh Hosseinigoki, Oliver Kosut
2020 J jnl
CoRR
Zhigang Chu, Oliver Kosut, Lalitha Sankar
2020 conf
CNS
Jiachun Liao, Lalitha Sankar, Oliver Kosut, Flávio P. Calmon
2020 J jnl
CoRR
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2020 J jnl
CoRR
Shahab Asoodeh, Jiachun Liao, Flávio P. Calmon, Oliver Kosut, Lalitha Sankar
2020 conf
SmartGridComm
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2019 conf
CNS
Allison Beemer, Oliver Kosut, Jörg Kliewer, Eric Graves, Paul L. Yu
2019 conf
SmartGridComm
Zhigang Chu, Andrea Pinceti, Reetam Sen Biswas, Oliver Kosut, Anamitra Pal, Lalitha Sankar
2019 J jnl
CoRR
Zhigang Chu, Andrea Pinceti, Reetam Sen Biswas, Oliver Kosut, Anamitra Pal, Lalitha Sankar
2019 Misc conf
CISS
Fatemeh Hosseinigoki, Oliver Kosut
2019 J jnl
IEEE Trans. Inf. Theory
Nematollah Iri, Oliver Kosut
2019 J jnl
CoRR
Andrea Pinceti, Lalitha Sankar, Oliver Kosut
2019 J jnl
IEEE Trans. Inf. Theory
Nematollah Iri, Oliver Kosut
2019 J jnl
Entropy
Fatemeh Hosseinigoki, Oliver Kosut
2019 B conf
ISIT
Jiachun Liao, Lalitha Sankar, Oliver Kosut, Flávio P. Calmon
2019 J jnl
CoRR
Jiachun Liao, Lalitha Sankar, Oliver Kosut, Flávio P. Calmon
2019 J jnl
IEEE Trans. Inf. Theory
Oliver Kosut, Jörg Kliewer
2019 B conf
ISIT
Allison Beemer, Oliver Kosut, Jörg Kliewer, Eric Graves, Paul L. Yu
2019 J jnl
IEEE Trans. Inf. Theory
Jiachun Liao, Oliver Kosut, Lalitha Sankar, Flávio du Pin Calmon
2019 J jnl
CoRR
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2018 B conf
ISIT
Jiachun Liao, Oliver Kosut, Lalitha Sankar, Flávio P. Calmon
2018 J jnl
CoRR
Jiachun Liao, Oliver Kosut, Lalitha Sankar, Flávio P. Calmon
2018 B conf
ITW
Oliver Kosut, Jörg Kliewer
2018 B conf
ISIT
Fatemeh Hosseinigoki, Oliver Kosut
2018 B conf
ISIT
Oliver Kosut, Jörg Kliewer
2018 J jnl
CoRR
Oliver Kosut, Jörg Kliewer
2018 B conf
ITW
Jiachun Liao, Oliver Kosut, Lalitha Sankar, Flávio P. Calmon
2018 J jnl
CoRR
Jiachun Liao, Oliver Kosut, Lalitha Sankar, Flávio P. Calmon
2018 J jnl
CoRR
Jiachun Liao, Oliver Kosut, Lalitha Sankar, Flávio du Pin Calmon
2018 conf
SmartGridComm
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2018 J jnl
CoRR
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2018 J jnl
IEEE Trans. Inf. Theory
Xiaoqing Fan, Oliver Kosut, Aaron B. Wagner
2017 J jnl
IEEE Trans. Inf. Theory
Oliver Kosut, Lalitha Sankar
2017 J jnl
CoRR
Jiazi Zhang, Zhigang Chu, Lalitha Sankar, Oliver Kosut
2017 B conf
ISIT
Oliver Kosut, Jörg Kliewer
2017 J jnl
IEEE Trans. Inf. Theory
Oliver Kosut, Jörg Kliewer
2017 J jnl
CoRR
Jiazi Zhang, Zhigang Chu, Lalitha Sankar, Oliver Kosut
2017 conf
SmartGridComm
Jiazi Zhang, Zhigang Chu, Lalitha Sankar, Oliver Kosut
2017 J jnl
CoRR
Nematollah Iri, Oliver Kosut
2017 conf
Allerton
Nematollah Iri, Oliver Kosut
2017 J jnl
CoRR
Kousha Kalantari, Oliver Kosut, Lalitha Sankar
2017 B conf
ISIT
Kousha Kalantari, Lalitha Sankar, Oliver Kosut
2017 J jnl
CoRR
Oliver Kosut, Jörg Kliewer
2017 J jnl
CoRR
Fatemeh Hosseinigoki, Oliver Kosut
2017 Misc conf
CISS
Nematollah Iri, Oliver Kosut
2017 J jnl
CoRR
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2016 B conf
ISIT
Nematollah Iri, Oliver Kosut
2016 J jnl
CoRR
Peida Tian, Sidharth Jaggi, Mayank Bakshi, Oliver Kosut
2016 B conf
ISIT
Peida Tian, Sidharth Jaggi, Mayank Bakshi, Oliver Kosut
2016 conf
SSP
Inaki Esnaola, Samir Medina Perlaza, H. Vincent Poor, Oliver Kosut
2016 J jnl
CoRR
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2016 conf
SmartGridComm
Zhigang Chu, Jiazi Zhang, Oliver Kosut, Lalitha Sankar
2016 J jnl
CoRR
Nematollah Iri, Oliver Kosut
2016 J jnl
IEEE Trans. Smart Grid
Inaki Esnaola, Samir Medina Perlaza, H. Vincent Poor, Oliver Kosut
2016 B conf
ITW
Oliver Kosut, Jörg Kliewer
2016 conf
Allerton
Kousha Kalantari, Oliver Kosut, Lalitha Sankar
2016 B conf
ISIT
Oliver Kosut, Jörg Kliewer
2016 conf
Allerton
Fatemeh Hosseinigoki, Oliver Kosut
2016 J jnl
CoRR
Xiaoqing Fan, Oliver Kosut, Aaron B. Wagner
2015 B conf
ITW
Oliver Kosut
2015 J jnl
IEEE Trans. Signal Process.
Ying Liu, Oliver Kosut, Alan S. Willsky
2015 B conf
ISIT
Nematollah Iri, Oliver Kosut
2015 J jnl
CoRR
Jingwen Liang, Lalitha Sankar, Oliver Kosut
2014 J jnl
CoRR
Oliver Kosut, Lalitha Sankar
2014 J jnl
CoRR
Oliver Kosut, Jörg Kliewer
2014 B conf
ISIT
Oliver Kosut, Jörg Kliewer
2014 conf
SAM
Oliver Kosut
2014 B conf
ISIT
Oliver Kosut, Lalitha Sankar
2014 B conf
ITW
Oliver Kosut, Li-Wei Kao
2014 J jnl
IEEE Trans. Inf. Theory
Vincent Y. F. Tan, Oliver Kosut
2014 J jnl
IEEE Trans. Inf. Theory
Oliver Kosut, Lang Tong, David N. C. Tse
2013 conf
GlobalSIP
Oliver Kosut
2013 B conf
ISIT
Oliver Kosut
2013 B conf
ISIT
Ying Liu, Oliver Kosut, Alan S. Willsky
2013 B conf
ISIT
Oliver Kosut, Lalitha Sankar
2012 J jnl
CoRR
Vincent Y. F. Tan, Oliver Kosut
2012 Misc conf
CISS
Vincent Y. F. Tan, Oliver Kosut
2012 B conf
ISIT
Vincent Y. F. Tan, Oliver Kosut
2011 J jnl
IEEE Trans. Smart Grid
Oliver Kosut, Liyan Jia, Robert J. Thomas, Lang Tong
2011 J jnl
CoRR
Oliver Kosut, Lang Tong, David Tse
2010 Misc conf
CISS
Oliver Kosut, Liyan Jia, Robert J. Thomas, Lang Tong
2010 B conf
ISIT
Oliver Kosut, Lang Tong, David N. C. Tse
2009 conf
Allerton
Oliver Kosut, Lang Tong, David Tse
2009 B conf
ISIT
Oliver Kosut, Lang Tong
2008 conf
Allerton
Oliver Kosut, Lang Tong
2008 J jnl
IEEE Trans. Inf. Theory
Oliver Kosut, Lang Tong
2008 B conf
ISIT
Oliver Kosut, Lang Tong
2007 J jnl
CoRR
Oliver Kosut, Lang Tong
2007 J jnl
CoRR
Oliver Kosut, Lang Tong
2007 B conf
ISIT
Oliver Kosut, Lang Tong
2006 J jnl
CoRR
Oliver Kosut, Lang Tong
redb/extractors/elf_extractor.py
← Index redb/extractors/elf_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect

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

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class ELFExtractor(Extractor, metaclass=ABCMeta):

    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
        )
        # Store ELF object if provided, otherwise we'll create it per-operation for security
        self._provided_elf = elf
        self._elf_file_valid = None  # Cache validity check

    def _with_elf_file(self, operation):
        """Safely execute an operation with an ELF file using context manager.

        Args:
            operation: A callable that takes an ELFFile object and returns a result

        Returns:
            The result of the operation, or None if an error occurred
        """
        if self._provided_elf:
            try:
                return operation(self._provided_elf)
            except ELFError as e:
                if "String Table not found" in str(e):
                    self.log.warning(f"String table missing in ELF {self.hash.sha256}: {e}")
                    return None
                else:
                    self.log.error(f"ELF format error {self.hash.sha256} Full error: {e}")
                    return None
            except Exception as e:
                self.log.error(f"Error processing ELF file {self.hash.sha256} Full error: {e}")
                return None

        try:
            with open(self.filepath, 'rb') as f:
                elf = ELFFile(f)
                if not elf:
                    raise ELFError("Empty file?")
                return operation(elf)
        except ELFError as e:
            if "String Table not found" in str(e):
                self.log.warning(f"String table missing in ELF {self.hash.sha256}: {e}")
                return None
            else:
                self.log.error(f"ELF format error {self.hash.sha256} Full error: {e}")
                return None
        except Exception as e:
            self.log.error(f"Error reading ELF file {self.hash.sha256} Full error: {e}")
            return None

    def _is_elf_file(self):
        """Check if the file is a valid ELF binary."""
        if self._elf_file_valid is not None:
            return self._elf_file_valid

        def check_elf_validity(elf):
            # pyelftools ELFFile object existing means it's valid ELF
            # Just check that we can access the header
            header = elf.header
            return header is not None

        try:
            result = self._with_elf_file(check_elf_validity)
            self._elf_file_valid = bool(result)
            return self._elf_file_valid
        except Exception as e:
            self.log.error(f"Error checking ELF file: {e}")
            self._elf_file_valid = False
            return False

    def _is_64bit(self):
        """Check if the ELF binary is 64-bit."""
        def check_64bit(elf):
            return elf.header.get('e_ident', {}).get('EI_CLASS') == 'ELFCLASS64'

        try:
            result = self._with_elf_file(check_64bit)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking ELF bitness: {e}")
            return False

    def _is_stripped(self):
        """Check if the ELF binary is stripped (no symbol table)."""
        def check_stripped(elf):
            # Look for symbol table sections
            for section in elf.iter_sections():
                if section.name in ['.symtab', '.strtab']:
                    return False
            return True

        try:
            result = self._with_elf_file(check_stripped)
            return result if result is not None else True
        except Exception as e:
            self.log.error(f"Error checking if ELF is stripped: {e}")
            return True

    def _has_debug_info(self):
        """Check if the ELF binary contains debug information."""
        def check_debug_info(elf):
            # Look for debug sections
            debug_sections = ['.debug_info', '.debug_line', '.debug_str', '.debug_abbrev']
            for section in elf.iter_sections():
                if section.name in debug_sections:
                    return True
            return False

        try:
            result = self._with_elf_file(check_debug_info)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking debug info: {e}")
            return False

    def _get_architecture(self):
        """Get the architecture of the ELF binary."""
        def get_arch(elf):
            machine = elf.header.get('e_machine', 'EM_NONE')

            # Map common machine types to readable names
            arch_map = {
                'EM_386': 'x86',
                'EM_X86_64': 'x86_64',
                'EM_ARM': 'ARM',
                'EM_AARCH64': 'ARM64',
                'EM_MIPS': 'MIPS',
                'EM_PPC': 'PowerPC',
                'EM_PPC64': 'PowerPC64',
                'EM_SPARC': 'SPARC',
                'EM_RISCV': 'RISC-V'
            }

            return arch_map.get(machine, machine)

        try:
            result = self._with_elf_file(get_arch)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting architecture: {e}")
            return "unknown"

    def _get_endianness(self):
        """Get the endianness of the ELF binary."""
        def get_endian(elf):
            data_encoding = elf.header.get('e_ident', {}).get('EI_DATA')
            if data_encoding == 'ELFDATA2LSB':
                return "little"
            elif data_encoding == 'ELFDATA2MSB':
                return "big"
            return "unknown"

        try:
            result = self._with_elf_file(get_endian)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting endianness: {e}")
            return "unknown"

    def _get_file_type(self):
        """Get the file type of the ELF binary."""
        def get_file_type(elf):
            etype = elf.header.get('e_type', 'ET_NONE')

            # Map file types to readable names
            type_map = {
                'ET_NONE': 'none',
                'ET_REL': 'relocatable',
                'ET_EXEC': 'executable',
                'ET_DYN': 'shared_object',
                'ET_CORE': 'core_dump'
            }

            return type_map.get(etype, etype)

        try:
            result = self._with_elf_file(get_file_type)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting file type: {e}")
            return "unknown"

    def _is_pie(self):
        """Check if the ELF binary is position-independent executable."""
        def check_pie(elf):
            # PIE binaries are typically ET_DYN type
            etype = elf.header.get('e_type', 'ET_NONE')
            if etype == 'ET_DYN':
                # Check if it has an entry point (executable) vs library
                entry_point = elf.header.get('e_entry', 0)
                return entry_point > 0
            return False

        try:
            result = self._with_elf_file(check_pie)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking PIE: {e}")
            return False

    def _has_stack_protection(self):
        """Check if the binary has stack protection (canaries)."""
        def check_stack_protection(elf):
            # Look for stack protection symbols
            stack_symbols = ['__stack_chk_fail', '__stack_chk_guard']

            for section in elf.iter_sections():
                if hasattr(section, 'iter_symbols'):
                    for symbol in section.iter_symbols():
                        if symbol.name in stack_symbols:
                            return True
            return False

        try:
            result = self._with_elf_file(check_stack_protection)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking stack protection: {e}")
            return False

    def _has_nx_bit(self):
        """Check if the binary has NX bit (non-executable stack)."""
        def check_nx_bit(elf):
            # Look for GNU_STACK segment
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_GNU_STACK':
                    flags = segment.header.get('p_flags', 0)
                    # Check if execute flag is NOT set (NX enabled)
                    return not (flags & 0x1)  # PF_X = 0x1
            return False

        try:
            result = self._with_elf_file(check_nx_bit)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking NX bit: {e}")
            return False

    def _has_relro(self):
        """Check if the binary has RELRO (Relocation Read-Only)."""
        def check_relro(elf):
            # Look for GNU_RELRO segment
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_GNU_RELRO':
                    return True
            return False

        try:
            result = self._with_elf_file(check_relro)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking RELRO: {e}")
            return False

    def _get_build_id(self):
        """Extract build ID from notes section."""
        def get_build_id(elf):
            # Look for build ID in notes sections
            for section in elf.iter_sections():
                if section.name == '.note.gnu.build-id':
                    for note in section.iter_notes():
                        if note['n_type'] == 'NT_GNU_BUILD_ID':
                            # Convert bytes to hex string
                            build_id = note['n_desc']
                            if isinstance(build_id, bytes):
                                return build_id.hex()
                            return str(build_id)
            return None

        try:
            result = self._with_elf_file(get_build_id)
            return result
        except Exception as e:
            self.log.error(f"Error getting build ID: {e}")
            return None

    def _count_sections(self):
        """Count the number of sections in the ELF file."""
        def count_sections(elf):
            return elf.header.get('e_shnum', 0)

        try:
            result = self._with_elf_file(count_sections)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting sections: {e}")
            return 0

    def _count_segments(self):
        """Count the number of segments (program headers) in the ELF file."""
        def count_segments(elf):
            return elf.header.get('e_phnum', 0)

        try:
            result = self._with_elf_file(count_segments)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting segments: {e}")
            return 0

    def _count_symbols(self):
        """Count the total number of symbols in symbol tables."""
        def count_symbols(elf):
            symbol_count = 0
            for section in elf.iter_sections():
                if hasattr(section, 'iter_symbols'):
                    symbol_count += section.num_symbols()
            return symbol_count

        try:
            result = self._with_elf_file(count_symbols)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting symbols: {e}")
            return 0

    def _get_dependencies(self):
        """Get list of dynamic dependencies."""
        def get_dependencies(elf):
            dependencies = []
            dynamic_section = elf.get_section_by_name('.dynamic')
            if dynamic_section:
                for tag in dynamic_section.iter_tags():
                    if tag.entry.d_tag == 'DT_NEEDED':
                        dependencies.append(tag.needed)
            return dependencies

        try:
            result = self._with_elf_file(get_dependencies)
            return result if result is not None else []
        except Exception as e:
            self.log.error(f"Error getting dependencies: {e}")
            return []