Xiaojun Chen

108 papers A* 7A 6B 13C 8Misc 2Journal 31Unranked 41
YearRankTypeTitle / Venue / Authors
2026 A* conf
AAAI
He Li, Xiaojun Chen, Jingcheng He, Zhendong Zhao, Shuguang Yuan, Xin Zhao, Yunfei Yang
2026 A* conf
AAAI
Yunfei Yang, Xiaojun Chen, Yuexin Xuan, Zhendong Zhao, Xin Zhao, He Li
2026 J jnl
IACR Cryptol. ePrint Arch.
Weizhan Jing, Xiaojun Chen, Xudong Chen, Ye Dong, Yaxi Yang, Qiang Liu
2026 J jnl
IACR Cryptol. ePrint Arch.
Weizhan Jing, Xiaojun Chen, Xudong Chen, Ye Dong, Qiang Liu, Tingyu Fan
2026 J jnl
Cybersecur.
Weizhan Jing, Xiaojun Chen, Xudong Chen, Ye Dong, Qiang Liu, Tingyu Fan
2026 A* conf
AAAI
Xin Zhao, Xiaojun Chen, Bingshan Liu, Zeyao Liu, Zhendong Zhao, Xiaoyan Gu
2025 J jnl
CoRR
Xiaoshuang Ji, Zhendong Zhao, Xiaoyan Gu, Xiaojun Chen, Xin Zhao, Zeyao Liu
2025 A conf
CIKM
Xin Zhao, Xiaojun Chen, Haoyu Gao
2025 conf
PRICAI (4)
He Li, Xiaojun Chen, Yunfei Yang, Zhendong Zhao, Shuguang Yuan, Xin Zhao
2025 J jnl
CoRR
Yunfei Yang, Xiaojun Chen, Zhendong Zhao, Yu Zhou, Xiaoyan Gu, Juan Cao
2025 A* conf
SP
Guang Yan, Yuhui Zhang, Zimu Guo, Lutan Zhao, Xiaojun Chen, Chen Wang, Wenhao Wang, Dan Meng, Rui Hou
2025 J jnl
CoRR
Guang Yan, Yuhui Zhang, Zimu Guo, Lutan Zhao, Xiaojun Chen, Chen Wang, Wenhao Wang, Dan Meng, Rui Hou
2025 J jnl
CoRR
Yunfei Yang, Xiaojun Chen, Yuexin Xuan, Zhendong Zhao, Xin Zhao, He Li
2025 J jnl
Comput. Networks
Tingyu Fan, Xiaojun Chen, Xudong Chen, Ye Dong, Weizhan Jing, Zhendong Zhao
2025 J jnl
IACR Cryptol. ePrint Arch.
Yansong Zhang, Xiaojun Chen, Qinghui Zhang, Ye Dong, Xudong Chen
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Yansong Zhang, Xiaojun Chen, Ye Dong, Qinghui Zhang, Rui Hou, Qiang Liu, Xudong Chen
2025 A conf
ICME
Yunfei Yang, Xiaojun Chen, Yuexin Xuan, Zhendong Zhao
2025 J jnl
CoRR
Yunfei Yang, Xiaojun Chen, Yuexin Xuan, Zhendong Zhao
2025 J jnl
CoRR
Xiaoshuang Ji, Zhendong Zhao, Xiaojun Chen, Xin Zhao, Zeyao Liu
2025 Misc conf
ICASSP
Bisheng Tang, Xiaojun Chen, Shaopu Wang, Yuexin Xuan, Zhendong Zhao
2025 B conf
TrustCom
Weizhan Jing, Xiaojun Chen, Xudong Chen, Ye Dong, Yaxi Yang, Qiang Liu
2025 J jnl
IACR Cryptol. ePrint Arch.
Weizhan Jing, Xiaojun Chen, Xudong Chen, Ye Dong, Yaxi Yang, Qiang Liu
2025 J jnl
CoRR
Xin Zhao, Xiaojun Chen, Bingshan Liu, Zeyao Liu, Zhendong Zhao, Xiaoyan Gu
2025 conf
EMNLP (Findings)
He Li, Xiaojun Chen, Zhendong Zhao, Yunfei Yang, Xin Zhao, Jingcheng He
2025 J jnl
CoRR
Xin Zhao, Xiaojun Chen, Bingshan Liu, Haoyu Gao, Zhendong Zhao, Yilong Chen
2024 conf
SecureComm (1)
Qiang Liu, Xiaojun Chen, Weizhan Jing, Ye Dong
2024 J jnl
CoRR
Xin Zhao, Xiaojun Chen, Haoyu Gao
2024 J jnl
CoRR
Xin Zhao, Xiaojun Chen, Yuexin Xuan, Zhendong Zhao
2024 conf
ECCV (71)
Xin Zhao, Xiaojun Chen, Xudong Chen, He Li, Tingyu Fan, Zhendong Zhao
2024 J jnl
CoRR
Xin Zhao, Xiaojun Chen, Xudong Chen, He Li, Tingyu Fan, Zhendong Zhao
2024 conf
ICC
Tingyu Fan, Xiaojun Chen, Ye Dong, Xudong Chen, Weizhan Jing
2024 A conf
ICME
Yunfei Yang, Xiaojun Chen, Yuexin Xuan, Zhendong Zhao
2024 J jnl
CoRR
Bisheng Tang, Xiaojun Chen, Shaopu Wang, Yuexin Xuan, Zhendong Zhao
2024 conf
ICPP Workshops
Bisheng Tang, Xiaojun Chen, Shaopu Wang, Yuexin Xuan, Zhendong Zhao
2024 A conf
ACSAC
Tingyu Fan, Xiaojun Chen, Ye Dong, Xudong Chen, Yuexin Xuan, Weizhan Jing
2024 conf
SecureComm (1)
Qinghui Zhang, Xiaojun Chen, Xudong Chen, Xin Zhao, Weizhan Jing, Tingyu Fan
2024 conf
ICONIP (9)
Xiaoshuang Ji, Zhendong Zhao, Xiaojun Chen, Xin Zhao, Zeyao Liu
2024 conf
ICC
Xudong Chen, Xiaojun Chen, Ye Dong, Weizhan Jing, Tingyu Fan, Qinghui Zhang
2024 B conf
IJCNN
Yunfei Yang, Xiaojun Chen, Zhendong Zhao, Yuexin Xuan, Bisheng Tang, Xiaoying Li
2023 J jnl
IEEE Trans. Inf. Forensics Secur.
Ye Dong, Xiaojun Chen, Xiangfu Song, Kaiyun Li
2023 J jnl
Neural Networks
Bisheng Tang, Xiaojun Chen, Shaopu Wang, Yuexin Xuan, Zhendong Zhao
2023 conf
ICANN (8)
Shunan Zang, Chuang Zhang, Jingwen Lin, Xiaojun Chen, Shuai Zhang
2023 A* conf
WWW
Ye Dong, Xiaojun Chen, Weizhan Jing, Kaiyun Li, Weiping Wang
2023 J jnl
IACR Cryptol. ePrint Arch.
Ye Dong, Xiaojun Chen, Weizhan Jing, Kaiyun Li, Weiping Wang
2023 conf
ECML/PKDD (2)
Yuexin Xuan, Xiaojun Chen, Zhendong Zhao, Bisheng Tang, Ye Dong
2023 J jnl
CoRR
Yuexin Xuan, Xiaojun Chen, Zhendong Zhao, Bisheng Tang, Ye Dong
2023 A conf
ECAI
Xiaoying Li, Xiaojun Chen, Bisheng Tang, Shaopu Wang, Yuexin Xuan, Zhendong Zhao
2022 B conf
IJCNN
Yuexin Xuan, Xiaojun Chen, Zhendong Zhao, Yangyang Ding, Jianming Lv
2022 conf
EISA
Dayin Zhang, Xiaojun Chen, Jinqiao Shi
2022 conf
ICANN (1)
Xiaojun Liu, Shunan Zang, Chuang Zhang, Xiaojun Chen, Yangyang Ding
2022 J jnl
CoRR
Xiaojun Liu, Shunan Zang, Chuang Zhang, Xiaojun Chen, Yangyang Ding
2022 A* conf
CVPR
Zhendong Zhao, Xiaojun Chen, Yuexin Xuan, Ye Dong, Dakui Wang, Kaitai Liang
2022 conf
PRICAI (2)
Shaopu Wang, Xiaoying Li, Jiaxin Zhang, Xiaojun Chen, Jinqiao Shi
2022 B conf
IJCNN
Bisheng Tang, Xiaojun Chen, Dakui Wang, Zhendong Zhao
2022 C conf
ICA3PP
Xiaoying Li, Xiaojun Chen, Shaopu Wang, Yangyang Ding, Kaiyun Li
2022 B conf
ICPR
Shunan Zang, Chuang Zhang, Xiaojun Liu, Xiaojun Chen, Peng Zhang, Jie Liu
2022 C conf
CSCWD
Yuwei Li, Dakui Wang, Jinqing Li, Yangyang Ding, Xiaojun Chen
2022 conf
ECML/PKDD (3)
Shaopu Wang, Xiaojun Chen, Mengzhen Kou, Jinqiao Shi
2022 J jnl
CoRR
Shaopu Wang, Xiaojun Chen, Mengzhen Kou, Jinqiao Shi
2022 B conf
IJCNN
Bisheng Tang, Xiaojun Chen, Dakui Wang, Zhendong Zhao
2021 B conf
TrustCom
Dayin Zhang, Xiaojun Chen, Jinqiao Shi, Dakui Wang, Shuai Zeng
2021 J jnl
CoRR
Kaiyun Li, Xiaojun Chen, Ye Dong, Peng Zhang, Dakui Wang, Shuai Zeng
2021 A* conf
IJCAI
Jinqing Li, Xiaojun Chen, Dakui Wang, Yuwei Li
2021 conf
ESORICS (1)
Ye Dong, Xiaojun Chen, Kaiyun Li, Dakui Wang, Shuai Zeng
2021 J jnl
IACR Cryptol. ePrint Arch.
Ye Dong, Xiaojun Chen, Kaiyun Li, Dakui Wang, Shuai Zeng
2021 J jnl
Inf. Sci.
Zhendong Zhao, Xiaojun Chen, Dakui Wang, Yuexin Xuan, Gang Xiong
2020 A conf
ECAI
Jinqing Li, Dakui Wang, Xiaojun Chen, Pencheng Liao, Shujuan Chen
2020 conf
ESORICS (1)
Liyan Shen, Xiaojun Chen, Jinqiao Shi, Ye Dong, Binxing Fang
2020 conf
NLPCC (1)
Xiaojun Liu, Chuang Zhang, Xiaojun Chen, Yanan Cao, Jinpeng Li
2020 J jnl
Comput. Secur.
Ye Dong, Xiaojun Chen, Liyan Shen, Dakui Wang
2020 conf
MMM (2)
Wei Hou, Dakui Wang, Xiaojun Chen
2020 B conf
IJCNN
Jinpeng Li, Chuang Zhang, Xiaojun Chen, Yanan Cao, Ruipeng Jia
2020 B conf
IJCNN
Pengcheng Liao, Chuang Zhang, Xiaojun Chen, Xiaofei Zhou
2020 B conf
ICTAI
Jianming Lv, Chaojie Hu, Yipeng Zhou, Xiaojun Chen
2019 conf
ICC
Liyan Shen, Xiaojun Chen, Jinqiao Shi, Binxing Fang
2019 Misc conf
SAC
Rui Xu, Xiaojun Chen, Jinqiao Shi
2019 B conf
IJCNN
Jinpeng Li, Chuang Zhang, Xiaojun Chen, Yanan Cao, Pengcheng Liao, Peng Zhang
2019 J jnl
CoRR
Pengcheng Liao, Chuang Zhang, Xiaojun Chen, Xiaofei Zhou
2019 C conf
ICICS
Ye Dong, Xiaojun Chen, Liyan Shen, Dakui Wang
2019 J jnl
IACR Cryptol. ePrint Arch.
Ye Dong, Xiaojun Chen, Liyan Shen
2019 conf
HPCC/SmartCity/DSS
Hong Ding, Chuang Zhang, Xiaojun Chen
2018 conf
DSC
Dayin Zhang, Xiaojun Chen, Dakui Wang, Jinqiao Shi
2018 conf
DSC
Rui Xu, Xiaojun Chen, Xingxing Wang, Jinqiao Shi
2018 conf
ISPA/IUCC/BDCloud/SocialCom/SustainCom
Wenan Wang, Chuang Zhang, Xiaojun Chen, Zhao Li, Hong Ding, Xin Wen
2018 conf
ICANN (3)
Dongjie Zhang, Zheng Fang, Yanan Cao, Yanbing Liu, Xiaojun Chen, Jianlong Tan
2018 conf
ICCS (1)
Kaihang Zhang, Chuang Zhang, Xiaojun Chen, Jianlong Tan
2018 conf
HPCC/SmartCity/DSS
Hong Ding, Chuang Zhang, Xiaojun Chen, Jinqiao Shi, Wenan Wang
2018 conf
BIBM
Liyan Shen, Xiaojun Chen, Dakui Wang, Binxing Fang, Ye Dong
2018 B conf
ICPR
Xiaojun Chen, Li Bai, Dakui Wang, Jinqiao Shi
2017 B conf
GLOBECOM
Xiaojie Yu, Xiaojun Chen, Jinqiao Shi, Liyan Shen, Dakui Wang
2017 conf
DSC
Jianwei Ma, Xiaojun Chen, Rui Xu, Jinqiao Shi
2017 C conf
ISC
Xingxing Wang, Dakui Wang, Xiaojun Chen, Rui Xu, Jinqiao Shi, Li Guo
2016 conf
MILCOM
Rui Xu, Xiaojun Chen, Yingbing Wang, Jinqiao Shi, Haitao Mi
2015 C conf
ISCC
Yiguo Pu, Jinqiao Shi, Xiaojun Chen, Li Guo, Tingwen Liu
2014 conf
INFOCOM Workshops
Xiaojun Chen, Fei Xu, Rui Xu, Siu-Ming Yiu, Jinqiao Shi
2014 conf
ISCTCS
Yan Chen, Yiguo Pu, Xiaojun Chen, Jinqiao Shi, Xiaojie Yu
2014 conf
APWeb Workshophs
Rui Zhang, Xiaojun Chen, Jinqiao Shi, Fei Xu, Yiguo Pu
2014 C conf
ISCC
Tingwen Liu, Yiguo Pu, Jinqiao Shi, Quangang Li, Xiaojun Chen
2014 C conf
ISC
Yichen Wei, Fei Xu, Xiaojun Chen, Yiguo Pu, Jinqiao Shi, Sihan Qing
2014 conf
APWeb Workshophs
Yichen Wei, Xu Fei, Xiaojun Chen, Jinqiao Shi, Sihan Qing
2013 conf
ITQM
Cheng Qi, Xiaojun Chen, Cui Xu, Jinqiao Shi, Peipeng Liu
2013 conf
ITQM
Xiaojun Chen, Zicheng Wei, Yiguo Pu, Jinqiao Shi
2013 conf
ITQM
Haoliang Zhang, Jinqiao Shi, Xiaojun Chen
2013 conf
ITQM
Rui Xu, Xiaojun Chen, Jinqiao Shi
2013 conf
ITQM
Fei Xu, Jinqiao Shi, Xiaojun Chen, Kam-Pui Chow
2013 conf
ITQM
Yiguo Pu, Xiaojun Chen, Xu Cui, Jinqiao Shi, Li Guo, Cheng Qi
2012 conf
ISCTCS
Xiaojun Chen, Jinqiao Shi, Yiguo Pu, Haoliang Zhang
2007 C conf
IPCCC
Zhibin Zhang, Li Guo, Binxing Fang, Xiaojun Chen
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 []