Chandrajit Bajaj

75 papers A* 6A 1B 1C 2Journal 44Unranked 17
YearRankTypeTitle / Venue / Authors
2026 J jnl
Maple Trans.
Chandrajit Bajaj
2026 J jnl
CoRR
Aditya Sai Ellendula, Yi Wang, Minh Nguyen, Chandrajit Bajaj
2026 J jnl
CoRR
Shubham Bhardwaj, Chandrajit Bajaj
2025 J jnl
CoRR
Luke McLennan, Yi Wang, Ryan Farell, Minh Nguyen, Chandrajit Bajaj
2025 J jnl
CoRR
Ashwin Vinod, Chandrajit Bajaj
2025 J jnl
CoRR
Aditya Sai Ellendula, Chandrajit Bajaj
2025 conf
ECML/PKDD (7)
Aditya Sai Ellendula, Chandrajit Bajaj
2024 J jnl
CoRR
Xiaoyan Cong, Haitao Yang, Liyan Chen, Kaifeng Zhang, Li Yi, Chandrajit Bajaj, Qixing Huang
2024 J jnl
CoRR
Chandrajit Bajaj, Minh Nguyen
2024 A* conf
AAAI
Chen Song, Chandrajit Bajaj, Qixing Huang
2024 J jnl
CoRR
Chandrajit Bajaj, Minh Nguyen, Shubham Bhardwaj
2024 J jnl
CoRR
Chandrajit Bajaj, Minh Nguyen
2024 A conf
AISTATS
Taemin Heo, Chandrajit Bajaj
2023 J jnl
CoRR
Chen Song, Chandrajit Bajaj, Qixing Huang
2023 J jnl
CoRR
Haitao Yang, Xiangru Huang, Bo Sun, Chandrajit Bajaj, Qixing Huang
2023 J jnl
Mach. Learn. Sci. Technol.
Chandrajit Bajaj, Luke McLennan, Timothy Andeen, Avik Roy
2023 J jnl
Comput. Graph.
Ziyue Deng, Junfeng Jiang, Zhengming Chen, Wenxi Zhang, Qingqiang Yao, Chen Song, Yifan Sun, Zhenpei Yang, Siming Yan, Qixing Huang, Chandrajit Bajaj
2022 conf
CVMLH/WTEK
R. Hephzibah, Hepzibah A. Christinal, R. Jayanthi, S. Jebasingh, D. Abraham Chandy, Chandrajit Bajaj
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jan-Christopher Cohrs, Chandrajit Bajaj, Benjamin Berkels
2022 J jnl
CoRR
Chandrajit Bajaj, Omatharv Bharat Vaidya, Yi Wang
2022 J jnl
CoRR
Jan-Christopher Cohrs, Chandrajit Bajaj, Benjamin Berkels
2022 J jnl
Int. J. Comput. Math.
Chong Chen, Runqian Wang, Chandrajit Bajaj, Ozan Öktem
2022 A* conf
CVPR
Chen Song, Qixing Huang, Chandrajit Bajaj
2022 J jnl
CoRR
Chen Song, Qixing Huang, Chandrajit Bajaj
2022 J jnl
SoftwareX
Krzysztof Gajowniczek, Jialin Wu, Soumyajit Gupta, Chandrajit Bajaj
2022 J jnl
CoRR
Chandrajit Bajaj, Taemin Heo, Rochan Avlur
2022 J jnl
CoRR
Chandrajit Bajaj, Conrad Li, Minh Nguyen
2021 A* conf
ICCV
Qixing Huang, Xiangru Huang, Bo Sun, Zaiwei Zhang, Junfeng Jiang, Chandrajit Bajaj
2021 J jnl
CoRR
Qixing Huang, Xiangru Huang, Bo Sun, Zaiwei Zhang, Junfeng Jiang, Chandrajit Bajaj
2021 J jnl
CoRR
Chandrajit Bajaj, Avik Roy, Haoran Zhang
2021 J jnl
CoRR
Yunhao Yang, Yuhan Zheng, Yi Wang, Chandrajit Bajaj
2021 J jnl
CoRR
Chandrajit Bajaj, Minh Nguyen
2021 J jnl
CoRR
Arman Maesumi, Mingkang Zhu, Yi Wang, Tianlong Chen, Zhangyang Wang, Chandrajit Bajaj
2021 J jnl
CoRR
Chandrajit Bajaj, Yi Wang, Yunhao Yang, Yuhan Zheng
2021 J jnl
CoRR
Chandrajit Bajaj, Luke McLennan, Timothy Andeen, Avik Roy
2021 A* conf
ICCV
Haitao Yang, Zaiwei Zhang, Siming Yan, Haibin Huang, Chongyang Ma, Yi Zheng, Chandrajit Bajaj, Qixing Huang
2021 J jnl
CoRR
Haitao Yang, Zaiwei Zhang, Siming Yan, Haibin Huang, Chongyang Ma, Yi Zheng, Chandrajit Bajaj, Qixing Huang
2020 J jnl
CoRR
Tianlong Chen, Yi Wang, Jingyang Zhou, Sijia Liu, Shiyu Chang, Chandrajit Bajaj, Zhangyang Wang
2019 conf
IEEE BigData
Soumyajit Gupta, Chandrajit Bajaj
2019 J jnl
CoRR
Chandrajit Bajaj, Tianming Wang
2019 conf
IEEE BigData
Chandrajit Bajaj, Yi Wang, Tianming Wang
2019 J jnl
CoRR
Chandrajit Bajaj, Yi Wang, Tianming Wang
2019 A* conf
NeurIPS
Dilin Wang, Ziyang Tang, Chandrajit Bajaj, Qiang Liu
2019 J jnl
CoRR
Dilin Wang, Ziyang Tang, Chandrajit Bajaj, Qiang Liu
2019 J jnl
ACM Trans. Graph.
Qixing Huang, Zhenxiao Liang, Haoyun Wang, Simiao Zuo, Chandrajit Bajaj
2018 conf
ECCV (10)
Jialin Wu, Dai Li, Yu Yang, Chandrajit Bajaj, Xiangyang Ji
2018 J jnl
CoRR
Jialin Wu, Dai Li, Yu Yang, Chandrajit Bajaj, Xiangyang Ji
2018 J jnl
Comput. Aided Geom. Des.
Juan Cao, Yanyang Xiao, Zhonggui Chen, Wenping Wang, Chandrajit Bajaj
2018 A* conf
ICML
Chandrajit Bajaj, Tingran Gao, Zihang He, Qixing Huang, Zhenxiao Liang
2017 J jnl
Comput. Aided Des.
Ahmad A. Rushdi, Scott A. Mitchell, Ahmed H. Mahmoud, Chandrajit Bajaj, Mohamed S. Ebeida
2017 conf
NCVPRIPG
Soumyajit Gupta, Chandrajit Bajaj
2017 J jnl
Comput. Graph. Forum
Tiago M. C. Simões, Daniel Simões Lopes, Sérgio Dias, Francisco Fernandes, João Pereira, Joaquim A. Jorge, Chandrajit Bajaj, Abel João Padrão Gomes
2017 conf
NIPS
Xiangru Huang, Zhenxiao Liang, Chandrajit Bajaj, Qixing Huang
2016 J jnl
Comput. Methods Appl. Math.
Andrew Gillette, Alexander Rand, Chandrajit Bajaj
2016 J jnl
CoRR
Jilin Wu, Soumyajit Gupta, Chandrajit Bajaj
2016 conf
ICCST
Razieh Nokhbeh Zaeem, Suratna Budalakoti, K. Suzanne Barber, Muhibur Rasheed, Chandrajit Bajaj
2016 conf
BCB
Muhibur Rasheed, Nathan Clement, Abhishek Bhowmick, Chandrajit Bajaj
2015 J jnl
PLoS Comput. Biol.
Radhakrishna Bettadapura, Muhibur Rasheed, Antje Vollrath, Chandrajit Bajaj
2012 conf
IC3
Chandrajit Bajaj
2012 B conf
PacificVis
Chandrajit Bajaj
2011 ch.
Topological Methods in Data Analysis and Visualization
Chandrajit Bajaj, Andrew Gillette, Samrat Goswami, Bong June Kwon, Jose Rivera
2011 conf
SSVM
Andreas Schwarzkopf, Thomas Kalbe, Chandrajit Bajaj, Arjan Kuijper, Michael Goesele
2009 ch.
Topology-Based Methods in Visualization II
Chandrajit Bajaj, Andrew Gillette, Samrat Goswami
2008 J jnl
Comput. Graph. Forum
Lu Liu, Chandrajit Bajaj, Joseph Deasy, Daniel A. Low, Tao Ju
2007 conf
SIGGRAPH Posters
Lu Liu, Tao Ju, Daniel A. Low, Chandrajit Bajaj
2007 conf
SIGGRAPH Sketches
Lu Liu, Tao Ju, Daniel A. Low, Chandrajit Bajaj
2005 conf
SIGGRAPH Electronic Art and Animation Catalog
Chandrajit Bajaj
2002 C conf
EGVE
William J. Blanke, Chandrajit Bajaj
2002 conf
VisSym
Xiaoyu Zhang, Chandrajit Bajaj, Vijaya Ramachandran
2002 ed.
SCG
Ferran Hurtado, Vera Sacristán, Chandrajit Bajaj, Subhash Suri
1999 conf
VisSym
Chandrajit Bajaj, Insung Ihm, Gee Bum Koo, Sanghun Park
1999 conf
PVGS
Chandrajit Bajaj, Steven Cutchin
1998 J jnl
Int. J. Robotics Res.
Elisha Sacks, Chandrajit Bajaj
1994 ch.
Graphics Gems
Chandrajit Bajaj, Guoliang Xu
1993 C conf
WETICE
Vinod Anupam, Chandrajit Bajaj
redb/extractors/elf_extractors/elf_segments.py
← Index redb/extractors/elf_extractors/elf_segments.py python
import inspect
import hashlib
import math
from collections import Counter
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 ELFSegment


class ELFSegmentExtractor(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_segments = []
        self.elastic_index = self.index_prefix + "-elf_segments"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _is_empty_result(self, extracted_data) -> bool:
        """
        Override: Empty segments is an ERROR, not a valid empty case.
        A valid ELF file must have segments (program headers).
        """
        # Always return False - empty segments should be treated as an error
        return False

    def _calculate_entropy(self, data: bytes) -> float:
        """Calculate Shannon entropy of data."""
        if not data:
            return 0.0

        try:
            # Count frequency of each byte
            byte_counts = Counter(data)
            data_len = len(data)

            # Calculate entropy
            entropy = 0.0
            for count in byte_counts.values():
                if count > 0:
                    frequency = count / data_len
                    entropy -= frequency * math.log2(frequency)

            return entropy
        except Exception as e:
            self.log.error(f"Error calculating entropy: {e}")
            return 0.0

    def _map_segment_type(self, p_type_str: str) -> int:
        """Map segment type string to enum value."""
        type_map = {
            'PT_NULL': 0,
            'PT_LOAD': 1,
            'PT_DYNAMIC': 2,
            'PT_INTERP': 3,
            'PT_NOTE': 4,
            'PT_SHLIB': 5,
            'PT_PHDR': 6,
            'PT_TLS': 7
        }
        return type_map.get(p_type_str, 0)

    def _decode_segment_flags(self, flags: int) -> List[str]:
        """Decode segment flags to human-readable strings."""
        flag_strings = []

        if flags & 0x1:  # PF_X
            flag_strings.append('EXECUTE')
        if flags & 0x2:  # PF_W
            flag_strings.append('WRITE')
        if flags & 0x4:  # PF_R
            flag_strings.append('READ')

        return flag_strings if flag_strings else ['NONE']

    def _extract_segment_data(self, segment) -> ELFSegment:
        """Extract data from a single segment with granular error handling."""
        # Initialize with safe defaults
        segment_type = 0
        segment_type_str = 'unknown'
        segment_flags = 0
        segment_flags_str = ['NONE']
        segment_offset = 0
        segment_vaddr = 0
        segment_paddr = 0
        segment_filesz = 0
        segment_memsz = 0
        segment_align = 0
        segment_entropy = 0.0
        segment_sha256 = ""
        segment_md5 = ""

        # Try to get segment header
        header = None
        try:
            header = segment.header
        except Exception as e:
            self.log.warning(f"Could not access segment header: {e}")
            return ELFSegment(
                segment_type=segment_type, segment_type_str=segment_type_str,
                segment_flags=segment_flags, segment_flags_str=segment_flags_str,
                segment_offset=segment_offset, segment_vaddr=segment_vaddr,
                segment_paddr=segment_paddr, segment_filesz=segment_filesz,
                segment_memsz=segment_memsz, segment_align=segment_align,
                segment_entropy=segment_entropy, segment_sha256=segment_sha256,
                segment_md5=segment_md5
            )

        # Extract segment type
        try:
            p_type_str = header.get('p_type', 'PT_NULL')
            segment_type = self._map_segment_type(p_type_str)
            segment_type_str = p_type_str.replace('PT_', '') if p_type_str.startswith('PT_') else p_type_str
        except Exception as e:
            self.log.warning(f"Could not extract segment type: {e}")

        # Extract segment flags
        try:
            segment_flags = header.get('p_flags', 0)
            segment_flags_str = self._decode_segment_flags(segment_flags)
        except Exception as e:
            self.log.warning(f"Could not extract segment flags: {e}")

        # Extract segment addresses and sizes
        try:
            segment_offset = header.get('p_offset', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment offset: {e}")

        try:
            segment_vaddr = header.get('p_vaddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment vaddr: {e}")

        try:
            segment_paddr = header.get('p_paddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment paddr: {e}")

        try:
            segment_filesz = header.get('p_filesz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment filesz: {e}")

        try:
            segment_memsz = header.get('p_memsz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment memsz: {e}")

        try:
            segment_align = header.get('p_align', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment align: {e}")

        # Calculate entropy and hashes for segment data (most likely to fail)
        try:
            if segment_filesz > 0:
                segment_data = segment.data()
                if segment_data:
                    # Calculate entropy
                    segment_entropy = self._calculate_entropy(segment_data)

                    # Calculate hashes
                    segment_sha256 = hashlib.sha256(segment_data).hexdigest()
                    segment_md5 = hashlib.md5(segment_data).hexdigest()
        except Exception as e:
            self.log.warning(f"Could not read segment data for hashing: {e}")
            # Keep defaults (0.0, "", "")

        return ELFSegment(
            segment_type=segment_type,
            segment_type_str=segment_type_str,
            segment_flags=segment_flags,
            segment_flags_str=segment_flags_str,
            segment_offset=segment_offset,
            segment_vaddr=segment_vaddr,
            segment_paddr=segment_paddr,
            segment_filesz=segment_filesz,
            segment_memsz=segment_memsz,
            segment_align=segment_align,
            segment_entropy=segment_entropy,
            segment_sha256=segment_sha256,
            segment_md5=segment_md5
        )

    def tag(self):
        return Tag.ELF_SEGMENTS.value if hasattr(Tag, 'ELF_SEGMENTS') else "elf_segments"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_segments(elf):
                segments_data = []

                # Iterate through all segments with per-segment error handling
                for segment_index, segment in enumerate(elf.iter_segments()):
                    try:
                        segment_data = self._extract_segment_data(segment)
                        if segment_data:
                            segments_data.append(segment_data)
                        else:
                            self.log.warning(f"Failed to extract data for segment {segment_index}")
                    except Exception as e:
                        self.log.warning(f"Error processing segment {segment_index}: {e}")
                        # Continue processing other segments

                return segments_data

            # Check if file is valid ELF
            if not self._is_elf_file():
                self.log.error(f"No valid ELF file for {self.hash.sha256}")
                return None

            segments_data = self._with_elf_file(extract_segments)
            if segments_data is None:
                return None

            self.elf_segments = segments_data
            return self.elf_segments

        except Exception as e:
            self.log.error(f"Error extracting ELF segments {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_segments
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_segments:
                    return None

                # Prepare data arrays for all segments
                data = []
                current_time = datetime.now(timezone.utc)
                for segment in self.elf_segments:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        segment.segment_type,
                        segment.segment_type_str,
                        segment.segment_flags,
                        segment.segment_flags_str,
                        segment.segment_offset,
                        segment.segment_vaddr,
                        segment.segment_paddr,
                        segment.segment_filesz,
                        segment.segment_memsz,
                        segment.segment_align,
                        segment.segment_entropy,
                        segment.segment_sha256,
                        segment.segment_md5,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'segment_type', 'segment_type_str', 'segment_flags', 'segment_flags_str',
                    'segment_offset', 'segment_vaddr', 'segment_paddr',
                    'segment_filesz', 'segment_memsz', 'segment_align',
                    'segment_entropy', 'segment_sha256', 'segment_md5',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    "Enum8('NULL'=0, 'LOAD'=1, 'DYNAMIC'=2, 'INTERP'=3, 'NOTE'=4, 'SHLIB'=5, 'PHDR'=6, 'TLS'=7)",
                    'LowCardinality(String)',
                    'UInt32',
                    'Array(LowCardinality(String))',
                    'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64',
                    'Float64',
                    'FixedString(64)', 'FixedString(32)',
                    '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_segments"