Haewoon Kwak

159 papers A* 12A 22B 7C 2Misc 2Journal 72Unranked 41
YearRankTypeTitle / Venue / Authors
2026 conf
CHI Extended Abstracts
Chaewon Kang, Youjin Lee, Haewoon Kwak, Jisun An, Jinyoung Han
2026 J jnl
CoRR
Byunghwee Lee, Sangyeon Kim, Filippo Menczer, Yong-Yeol Ahn, Haewoon Kwak, Jisun An
2026 conf
KDD (1)
Migyeong Kang, Jihyun Kim, Hyolim Jeon, Sunwoo Hwang, Jihyun An, Yonghoon Kim, Haewoon Kwak, Jisun An, Jinyoung Han
2026 J jnl
CoRR
Migyeong Kang, Jihyun Kim, Hyolim Jeon, Sunwoo Hwang, Jihyun An, Yonghoon Kim, Haewoon Kwak, Jisun An, Jinyoung Han
2026 J jnl
CoRR
Fan Huang, Haewoon Kwak, Jisun An
2026 J jnl
CoRR
Fan Huang, Haewoon Kwak, Jisun An
2026 conf
CHI Extended Abstracts
Hyunseon Won, Haewoon Kwak, Jisun An, Jinyoung Han
2026 J jnl
CoRR
Weihong Qi, Fan Huang, Rasika Muralidharan, Jisun An, Haewoon Kwak
2026 J jnl
PeerJ Comput. Sci.
Rachith Aiyappa, Shruthi Senthilmani, Jisun An, Haewoon Kwak, Yong-Yeol Ahn
2025 J jnl
CoRR
Joseph Malone, Rachith Aiyappa, Byunghwee Lee, Haewoon Kwak, Jisun An, Yong-Yeol Ahn
2025 conf
ICDM (Workshops)
Weihong Qi, Fan Huang, Jisun An, Haewoon Kwak
2025 J jnl
CoRR
Rasika Muralidharan, Haewoon Kwak, Jisun An
2025 J jnl
CoRR
Weihong Qi, Fan Huang, Jisun An, Haewoon Kwak
2025 J jnl
CoRR
Shintaro Sakai, Haewoon Kwak, Jisun An, Akira Matsui
2025 J jnl
CoRR
Shintaro Sakai, Jisun An, Migyeong Kang, Haewoon Kwak
2024 conf
ACL (Findings)
Preslav Nakov, Jisun An, Haewoon Kwak, Muhammad Arslan Manzoor, Zain Muhammad Mujahid, Husrev T. Sencar
2024 J jnl
CoRR
Rachith Aiyappa, Shruthi Senthilmani, Jisun An, Haewoon Kwak, Yong-Yeol Ahn
2024 J jnl
CoRR
Fan Huang, Haewoon Kwak, Kunwoo Park, Jisun An
2024 conf
LREC/COLING
Fan Huang, Haewoon Kwak, Kunwoo Park, Jisun An
2024 J jnl
CoRR
Byunghwee Lee, Rachith Aiyappa, Yong-Yeol Ahn, Haewoon Kwak, Jisun An
2024 J jnl
EPJ Data Sci.
Kunihiro Miyazaki, Taichi Murayama, Takayuki Uchiba, Jisun An, Haewoon Kwak
2024 conf
NAACL-HLT (Findings)
Zoher Kachwala, Jisun An, Haewoon Kwak, Filippo Menczer
2024 J jnl
CoRR
Zoher Kachwala, Jisun An, Haewoon Kwak, Filippo Menczer
2024 J jnl
CoRR
Fan Huang, Haewoon Kwak, Jisun An
2023 A conf
ICWSM
Kunihiro Miyazaki, Takayuki Uchiba, Kenji Tanaka, Jisun An, Haewoon Kwak, Kazutoshi Sasahara
2023 J jnl
CoRR
Rachith Aiyappa, Jisun An, Haewoon Kwak, Yong-Yeol Ahn
2023 conf
WWW (Companion Volume)
Fan Huang, Haewoon Kwak, Jisun An
2023 conf
WWW (Companion Volume)
Fan Huang, Haewoon Kwak, Jisun An
2023 J jnl
CoRR
Fan Huang, Haewoon Kwak, Jisun An
2023 conf
WebSci
Kunihiro Miyazaki, Taichi Murayama, Akira Matsui, Masaru Nishikawa, Takayuki Uchiba, Haewoon Kwak, Jisun An
2023 J jnl
CoRR
Kunihiro Miyazaki, Taichi Murayama, Takayuki Uchiba, Jisun An, Haewoon Kwak
2023 conf
WebSci
Hong Zhang, Haewoon Kwak, Wei Gao, Jisun An
2023 J jnl
CoRR
Hong Zhang, Haewoon Kwak, Wei Gao, Jisun An
2023 A conf
ICWSM
Shaoyi Liaw, Fan Huang, Fabrício Benevenuto, Haewoon Kwak, Jisun An
2023 J jnl
CoRR
Shaoyi Liaw, Fan Huang, Fabrício Benevenuto, Haewoon Kwak, Jisun An
2022 J jnl
CoRR
Kunihiro Miyazaki, Takayuki Uchiba, Kenji Tanaka, Jisun An, Haewoon Kwak, Kazutoshi Sasahara
2022 J jnl
CoRR
Fan Huang, Haewoon Kwak, Jisun An
2022 B conf
IEEE Big Data
Kunihiro Miyazaki, Takayuki Uchiba, Haewoon Kwak, Jisun An
2022 J jnl
PeerJ Comput. Sci.
Hind A. Al-Merekhi, Haewoon Kwak, Bernard J. Jansen
2022 J jnl
CoRR
Kunihiro Miyazaki, Takayuki Uchiba, Haewoon Kwak, Jisun An
2022 J jnl
CoRR
Yelena Mejova, Jisun An, Gianmarco De Francisci Morales, Haewoon Kwak
2022 J jnl
ACM Trans. Soc. Comput.
Yelena Mejova, Jisun An, Gianmarco De Francisci Morales, Haewoon Kwak
2022 J jnl
Data Inf. Manag.
Hind A. Al-Merekhi, Haewoon Kwak, Joni Salminen, Bernard J. Jansen
2022 J jnl
CoRR
Kunihiro Miyazaki, Taichi Murayama, Akira Matsui, Masaru Nishikawa, Takayuki Uchiba, Haewoon Kwak, Jisun An
2022 A conf
ICWSM
Yun Yu Chong, Haewoon Kwak
2022 J jnl
CoRR
Yun Yu Chong, Haewoon Kwak
2022 A conf
ICWSM
Haewoon Kwak, Jisun An, Kunwoo Park
2022 J jnl
CoRR
Haewoon Kwak, Jisun An, Kunwoo Park
2022 conf
WebSci
Haewoon Kwak
2022 J jnl
CoRR
Haewoon Kwak
2021 J jnl
CoRR
Preslav Nakov, Husrev Taha Sencar, Jisun An, Haewoon Kwak
2021 J jnl
PeerJ Comput. Sci.
Haewoon Kwak, Jisun An, Elise Jing, Yong-Yeol Ahn
2021 A conf
ICWSM
Kunwoo Park, Haewoon Kwak, Jisun An, Sanjay Chawla
2021 conf
EMNLP (Findings)
Jisun An, Haewoon Kwak, Claire Seungeun Lee, Bogang Jun, Yong-Yeol Ahn
2021 J jnl
CoRR
Jisun An, Haewoon Kwak, Claire Seungeun Lee, Bogang Jun, Yong-Yeol Ahn
2020 A conf
ICWSM
Kunwoo Park, Haewoon Kwak, Hyunho Song, Meeyoung Cha
2020 J jnl
CoRR
Kunwoo Park, Haewoon Kwak, Hyunho Song, Meeyoung Cha
2020 conf
WebSci
Haewoon Kwak, Jisun An, Yong-Yeol Ahn
2020 J jnl
CoRR
Haewoon Kwak, Jisun An, Yong-Yeol Ahn
2020 A* conf
WWW
Hind A. Al-Merekhi, Haewoon Kwak, Joni Salminen, Bernard J. Jansen
2020 A conf
ICWSM
Soumen Ganguly, Juhi Kulshrestha, Jisun An, Haewoon Kwak
2020 J jnl
CoRR
Haewoon Kwak, Jisun An, Yong-Yeol Ahn
2020 B conf
ASONAM
Samuel S. Guimarães, Julio C. S. Reis, Lucas Henrique C. Lima, Filipe N. Ribeiro, Marisa Vasconcelos, Jisun An, Haewoon Kwak, Fabrício Benevenuto
2020 conf
WWW (Companion Volume)
Hind A. Al-Merekhi, Bernard J. Jansen, Haewoon Kwak
2020 J jnl
Int. J. Hum. Comput. Stud.
Joni Salminen, João M. Santos, Haewoon Kwak, Jisun An, Soon-Gyo Jung, Bernard J. Jansen
2020 conf
WWW (Companion Volume)
Hind A. Al-Merekhi, Haewoon Kwak, Bernard J. Jansen
2020 J jnl
CoRR
Kunwoo Park, Haewoon Kwak, Jisun An, Sanjay Chawla
2020 A* conf
ACL
Ramy Baly, Georgi Karadzhov, Jisun An, Haewoon Kwak, Yoan Dinkov, Ahmed Ali, James R. Glass, Preslav Nakov
2020 J jnl
CoRR
Ramy Baly, Georgi Karadzhov, Jisun An, Haewoon Kwak, Yoan Dinkov, Ahmed Ali, James R. Glass, Preslav Nakov
2019 conf
ICIST
Joni Salminen, Mridul Nagpal, Haewoon Kwak, Jisun An, Soon-Gyo Jung, Bernard J. Jansen
2019 J jnl
Int. J. Hum. Comput. Stud.
Joni Salminen, Soon-Gyo Jung, Jisun An, Haewoon Kwak, Lene Nielsen, Bernard J. Jansen
2019 conf
HT
Hind A. Al-Merekhi, Haewoon Kwak, Bernard J. Jansen, Joni Salminen
2019 conf
SocInfo
Jisun An, Haewoon Kwak
2019 J jnl
CoRR
Jisun An, Haewoon Kwak
2019 J jnl
IEEE Trans. Games
Peter Mawhorter, Sercan Sengün, Haewoon Kwak, D. Fox Harrell
2019 A conf
ICWSM
Jisun An, Haewoon Kwak, Oliver Posegga, Andreas Jungherr
2019 J jnl
CoRR
Jisun An, Haewoon Kwak, Oliver Posegga, Andreas Jungherr
2019 J jnl
Online Inf. Rev.
Arkaitz Zubiaga, Bahareh R. Heravi, Jisun An, Haewoon Kwak
2019 conf
EMNLP/IJCNLP (3)
Yifan Zhang, Giovanni Da San Martino, Alberto Barrón-Cedeño, Salvatore Romeo, Jisun An, Haewoon Kwak, Todor Staykovski, Israa Jaradat, Georgi Karadzhov, Ramy Baly, Kareem Darwish, James R. Glass, Preslav Nakov
2019 J jnl
CoRR
Yifan Zhang, Giovanni Da San Martino, Alberto Barrón-Cedeño, Salvatore Romeo, Jisun An, Haewoon Kwak, Todor Staykovski, Israa Jaradat, Georgi Karadzhov, Ramy Baly, Kareem Darwish, James R. Glass, Preslav Nakov
2018 A* conf
CHI
Joni Salminen, Lene Nielsen, Soon-Gyo Jung, Jisun An, Haewoon Kwak, Bernard J. Jansen
2018 A conf
ICWSM
Joni Salminen, Hind A. Al-Merekhi, Milica Milenkovic, Soon-Gyo Jung, Jisun An, Haewoon Kwak, Bernard J. Jansen
2018 A conf
ICWSM
Soon-Gyo Jung, Jisun An, Haewoon Kwak, Joni Salminen, Bernard J. Jansen
2018 B conf
CHIIR
Soon-Gyo Jung, Joni Salminen, Haewoon Kwak, Jisun An, Bernard J. Jansen
2018 A conf
ICWSM
Soon-Gyo Jung, Joni O. Salminen, Jisun An, Haewoon Kwak, Bernard J. Jansen
2018 conf
INSCI
Bernard J. Jansen, Soon-Gyo Jung, Joni Salminen, Jisun An, Haewoon Kwak
2018 J jnl
Soc. Netw. Anal. Min.
Jisun An, Haewoon Kwak, Soon-Gyo Jung, Joni Salminen, Bernard J. Jansen
2018 conf
CHI Extended Abstracts
Joni Salminen, Soon-Gyo Jung, Jisun An, Haewoon Kwak, Bernard J. Jansen
2018 B conf
CHIIR
Joni Salminen, Bernard J. Jansen, Jisun An, Soon-Gyo Jung, Lene Nielsen, Haewoon Kwak
2018 J jnl
First Monday
Joni Salminen, Sercan Sengün, Haewoon Kwak, Bernard J. Jansen, Jisun An, Soon-Gyo Jung, Sarah Vieweg, D. Fox Harrell
2018 J jnl
ACM Trans. Web
Jisun An, Haewoon Kwak, Soon-Gyo Jung, Joni Salminen, M. Admad, Bernard J. Jansen
2018 conf
CHI Extended Abstracts
Joni Salminen, Haewoon Kwak, João M. Santos, Soon-Gyo Jung, Jisun An, Bernard J. Jansen
2018 conf
ACL (1)
Jisun An, Haewoon Kwak, Yong-Yeol Ahn
2018 J jnl
CoRR
Jisun An, Haewoon Kwak, Yong-Yeol Ahn
2018 A* conf
WWW
Haewoon Kwak, Jisun An, Joni Salminen, Soon-Gyo Jung, Bernard J. Jansen
2018 J jnl
CoRR
Haewoon Kwak, Jisun An, Joni Salminen, Soon-Gyo Jung, Bernard J. Jansen
2018 conf
WWW (Companion Volume)
Savvas Zannettou, Barry Bradlyn, Emiliano De Cristofaro, Haewoon Kwak, Michael Sirivianos, Gianluca Stringhini, Jeremy Blackburn
2018 J jnl
CoRR
Savvas Zannettou, Barry Bradlyn, Emiliano De Cristofaro, Michael Sirivianos, Gianluca Stringhini, Haewoon Kwak, Jeremy Blackburn
2017 conf
WWW (Companion Volume)
Kunwoo Park, Meeyoung Cha, Haewoon Kwak, Kuan-Ta Chen
2017 J jnl
CoRR
Kunwoo Park, Meeyoung Cha, Haewoon Kwak, Kuan-Ta Chen
2017 conf
SocInfo (2)
Jisun An, Hassan Aldarbesti, Haewoon Kwak
2017 B conf
Creativity & Cognition
D. Fox Harrell, Sarah Vieweg, Haewoon Kwak, Chong-U Lim, Sercan Sengün, Ali Jahanian, Pablo Ortiz
2017 J jnl
CoRR
Jisun An, Haewoon Kwak
2017 conf
HT
Júlio Cesar dos Reis, Haewoon Kwak, Jisun An, Johnnatan Messias, Fabrício Benevenuto
2017 J jnl
CoRR
Júlio Cesar dos Reis, Haewoon Kwak, Jisun An, Johnnatan Messias, Fabrício Benevenuto
2017 conf
FiCloud Workshops
Joni Salminen, Sercan Sengün, Haewoon Kwak, Bernard J. Jansen, Jisun An, Soon-Gyo Jung, Sarah Vieweg, D. Fox Harrell
2017 conf
WWW (Companion Volume)
Ah Reum Kang, Jeremy Blackburn, Haewoon Kwak, Huy Kang Kim
2017 J jnl
CoRR
Ah Reum Kang, Jeremy Blackburn, Haewoon Kwak, Huy Kang Kim
2017 C conf
AICCSA
Bernard J. Jansen, Soon-Gyo Jung, Joni Salminen, Jisun An, Haewoon Kwak
2017 conf
SocInfo (1)
Jisun An, Haewoon Kwak
2017 B conf
ASONAM
Haewoon Kwak, Jisun An
2017 J jnl
CoRR
Haewoon Kwak, Jisun An
2017 conf
CHI Extended Abstracts
Soon-Gyo Jung, Jisun An, Haewoon Kwak, Moeed Ahmad, Lene Nielsen, Bernard J. Jansen
2017 B conf
ASONAM
Jisun An, Haewoon Kwak, Bernard J. Jansen
2017 conf
ASIST
Bernard J. Jansen, Soon-Gyo Jung, Joni Salminen, Jisun An, Haewoon Kwak
2017 J jnl
CoRR
Jisun An, Haewoon Kwak
2017 A conf
ICWSM
Jisun An, Haewoon Kwak
2017 Misc conf
OZCHI
Lene Nielsen, Soon-Gyo Jung, Jisun An, Joni Salminen, Haewoon Kwak, Bernard J. Jansen
2016 A conf
ICWSM
Jisun An, Haewoon Kwak, Yelena Mejova, Sonia Alonso Saenz De Oger, Braulio Gomez Fortes
2016 J jnl
CoRR
Jisun An, Haewoon Kwak, Yelena Mejova, Sonia Alonso Saenz De Oger, Braulio Gomez Fortes
2016 ed.
News@ICWSM
Jisun An, Haewoon Kwak, Fabrício Benevenuto
2016 J jnl
CoRR
Haewoon Kwak, Jisun An
2016 conf
News@ICWSM
Haewoon Kwak, Jisun An
2016 J jnl
CoRR
Emaad A. Manzoor, Haewoon Kwak, Panos Kalnis
2016 conf
FiCloud Workshops
Jisun An, Hoyoun Cho, Haewoon Kwak, Mohammed Ziyaad Hassen, Bernard J. Jansen
2016 A conf
ICWSM
Haewoon Kwak, Jisun An
2016 J jnl
CoRR
Haewoon Kwak, Jisun An
2016 C conf
AICCSA
Jisun An, Haewoon Kwak, Bernard J. Jansen
2015 A conf
ICWSM
Júlio Cesar dos Reis, Fabrício Benevenuto de Souza, Pedro Olmo Stancioli Vaz de Melo, Raquel Oliveira Prates, Haewoon Kwak, Jisun An
2015 J jnl
CoRR
Júlio Cesar dos Reis, Fabrício Benevenuto, Pedro Olmo Stancioli Vaz de Melo, Raquel O. Prates, Haewoon Kwak, Jisun An
2015 A* conf
CHI
Haewoon Kwak, Jeremy Blackburn, Seungyeop Han
2015 J jnl
CoRR
Haewoon Kwak, Jeremy Blackburn, Seungyeop Han
2014 conf
SocInfo
Haewoon Kwak, Jisun An
2014 A* conf
CHI
Martin Pielot, Rodrigo de Oliveira, Haewoon Kwak, Nuria Oliver
2014 conf
SocInfo Workshops
Haewoon Kwak, Jeremy Blackburn, Huy Kang Kim
2014 A conf
CoNEXT
Ilias Leontiadis, Antonio Lima, Haewoon Kwak, Rade Stanojevic, David Wetherall, Konstantina Papagiannaki
2014 conf
WWW (Companion Volume)
Haewoon Kwak, Jong Gun Lee
2014 conf
SocInfo Workshops
Haewoon Kwak, Jeremy Blackburn
2014 J jnl
CoRR
Haewoon Kwak, Jeremy Blackburn
2014 J jnl
CoRR
Jeremy Blackburn, Haewoon Kwak
2014 A* conf
WWW
Jeremy Blackburn, Haewoon Kwak
2014 J jnl
CoRR
László Gyarmati, Haewoon Kwak, Pablo Rodriguez
2014 J jnl
CoRR
Haewoon Kwak, Jisun An
2014 conf
WWW (Companion Volume)
Haewoon Kwak
2013 A conf
CSCW
Bo Xu, Yun Huang, Haewoon Kwak, Noshir S. Contractor
2013 conf
WWW (Companion Volume)
Yoonsung Hong, Haewoon Kwak, Youngmin Baek, Sue B. Moon
2012 A conf
ICWSM
Haewoon Kwak, Sue B. Moon, Wonjae Lee
2011 J jnl
SIGWEB Newsl.
Haewoon Kwak, Changhyun Lee, Hosung Park, Hyunwoo Chun, Sue B. Moon
2011 A* conf
CHI
Haewoon Kwak, Hyunwoo Chun, Sue B. Moon
2010 A* conf
WWW
Changhyun Lee, Haewoon Kwak, Hosung Park, Sue B. Moon
2010 Misc conf
COMSNETS
Sue B. Moon, Jinyoung You, Haewoon Kwak, Daniel Kim, Hawoong Jeong
2010 A* conf
WWW
Haewoon Kwak, Changhyun Lee, Hosung Park, Sue B. Moon
2009 J jnl
IEEE/ACM Trans. Netw.
Meeyoung Cha, Haewoon Kwak, Pablo Rodriguez, Yong-Yeol Ahn, Sue B. Moon
2009 A conf
ICWSM
Haewoon Kwak, Hwa-Yong Shin, Jong-Il Yoon, Sue B. Moon
2009 A conf
Internet Measurement Conference
Haewoon Kwak, Yoonchan Choi, Young-Ho Eom, Hawoong Jeong, Sue B. Moon
2009 A* conf
SIGIR
Xavier Amatriain, Neal Lathia, Josep M. Pujol, Haewoon Kwak, Nuria Oliver
2008 A conf
Internet Measurement Conference
Hyunwoo Chun, Haewoon Kwak, Young-Ho Eom, Yong-Yeol Ahn, Sue B. Moon, Hawoong Jeong
2007 A* conf
WWW
Yong-Yeol Ahn, Seungyeop Han, Haewoon Kwak, Sue B. Moon, Hawoong Jeong
2007 A conf
Internet Measurement Conference
Meeyoung Cha, Haewoon Kwak, Pablo Rodriguez, Yong-Yeol Ahn, Sue B. Moon
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 []