Xi Chen

82 papers A* 14A 6Journal 54Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
Oper. Res.
Xi Chen, Jiameng Lyu, Xuan Zhang, Yuan Zhou
2026 J jnl
CoRR
Elynn Chen, Xi Chen, Yi Zhang
2026 J jnl
Manag. Sci.
Xi Chen, David Simchi-Levi, Yining Wang
2025 J jnl
Oper. Res.
Xi Chen, David Simchi-Levi, Zishuo Zhao, Yuan Zhou
2025 A* conf
EC
Mengqian Zhang, Yuhao Li, Xinyuan Sun, Elynn Y. Chen, Xi Chen
2025 J jnl
CoRR
Elynn Y. Chen, Xi Chen, Wenbo Jing, Xiao Liu
2024 J jnl
Math. Oper. Res.
Xi Chen, Will Ma, David Simchi-Levi, Linwei Xin
2024 J jnl
CoRR
Elynn Y. Chen, Xi Chen, Wenbo Jing
2024 J jnl
Oper. Res.
Xi Chen, Akshay Krishnamurthy, Yining Wang
2024 conf
DeFi@CCS
Sen Yang, Fan Zhang, Ken Huang, Xi Chen, Youwei Yang, Feng Zhu
2024 J jnl
Oper. Res.
Rui Gao, Xi Chen, Anton J. Kleywegt
2023 J jnl
Manag. Sci.
Xi Chen, Quanquan Liu, Yining Wang
2023 A* conf
EC
Shuting Shen, Xi Chen, Ethan X. Fang, Junwei Lu
2023 J jnl
Oper. Res.
Xi Chen, Sentao Miao, Yining Wang
2023 conf
DeFi@CCS
Yuhao Li, Mengqian Zhang, Jichen Li, Elynn Y. Chen, Xi Chen, Xiaotie Deng
2023 J jnl
CoRR
Yuhao Li, Mengqian Zhang, Jichen Li, Elynn Y. Chen, Xi Chen, Xiaotie Deng
2023 J jnl
Oper. Res.
Xi Chen, Yining Wang
2023 J jnl
CoRR
Xi Chen, David Simchi-Levi, Yining Wang
2022 J jnl
Manag. Sci.
Xi Chen, Zachary Owen, Clark Pixton, David Simchi-Levi
2022 J jnl
J. Mach. Learn. Res.
Xi Chen, Bo Jiang, Tianyi Lin, Shuzhong Zhang
2022 J jnl
Math. Oper. Res.
Xi Chen, Yunxiao Chen, Xiaoou Li
2022 J jnl
CoRR
Zishuo Zhao, Xi Chen, Yuan Zhou
2022 A* conf
IJCAI
Zishuo Zhao, Xi Chen, Xuefeng Zhang, Yuan Zhou
2022 J jnl
CoRR
Zishuo Zhao, Xi Chen, Xuefeng Zhang, Yuan Zhou
2022 J jnl
CoRR
Xi Chen, Jiameng Lyu, Yining Wang, Yuan Zhou
2022 J jnl
Manag. Sci.
Xi Chen, David Simchi-Levi, Yining Wang
2022 J jnl
CoRR
Sen Yang, Fan Zhang, Ken Huang, Xi Chen, Youwei Yang, Feng Zhu
2021 J jnl
CoRR
Xi Chen, Sentao Miao, Yining Wang
2021 J jnl
Math. Oper. Res.
Xi Chen, Yining Wang, Yuan Zhou
2021 J jnl
Oper. Res.
Xi Chen, Simai He, Bo Jiang, Christopher Thomas Ryan, Teng Zhang
2021 A conf
AISTATS
Yingkai Li, Yining Wang, Xi Chen, Yuan Zhou
2020 A* conf
ICDM
Chuheng Zhang, Yuanqi Li, Xi Chen, Yifei Jin, Pingzhong Tang, Jian Li
2020 J jnl
CoRR
Chuheng Zhang, Yuanqi Li, Xi Chen, Yifei Jin, Pingzhong Tang, Jian Li
2020 J jnl
J. Mach. Learn. Res.
Xi Chen, Yining Wang, Yuan Zhou
2020 J jnl
CoRR
Xi Chen, David Simchi-Levi, Yining Wang
2020 J jnl
CoRR
Xi Chen, Yining Wang
2019 J jnl
CoRR
Sentao Miao, Xi Chen, Xiuli Chao, Jiaxi Liu, Yidong Zhang
2019 J jnl
CoRR
Yasin Abbasi-Yadkori, Peter L. Bartlett, Xi Chen, Alan Malek
2019 J jnl
Oper. Res.
Xi Chen, Tengyu Ma, Jiawei Zhang, Yuan Zhou
2019 J jnl
CoRR
Xi Chen, Akshay Krishnamurthy, Yining Wang
2019 J jnl
Oper. Res.
Xi Chen, Yining Wang, Yu-Xiang Wang
2018 A* conf
SODA
Xi Chen, Yuanzhi Li, Jieming Mao
2018 J jnl
Oper. Res. Lett.
Xi Chen, Yining Wang
2018 J jnl
CoRR
Xi Chen, Yining Wang, Yuan Zhou
2018 J jnl
CoRR
Xi Chen, Yining Wang, Yuan Zhou
2018 A* conf
NeurIPS
Yining Wang, Xi Chen, Yuan Zhou
2018 J jnl
CoRR
Yining Wang, Xi Chen, Yuan Zhou
2018 J jnl
CoRR
Xi Chen, Tengyu Ma, Jiawei Zhang, Yuan Zhou
2018 J jnl
IEEE Trans. Inf. Theory
Xi Chen, Sivakanth Gopi, Jieming Mao, Jon Schneider
2017 J jnl
CoRR
Xi Chen, Yuanzhi Li, Jieming Mao
2017 J jnl
CoRR
Xi Chen, Yining Wang
2017 A* conf
ICML
Jiecao Chen, Xi Chen, Qin Zhang, Yuan Zhou
2017 J jnl
CoRR
Jiecao Chen, Xi Chen, Qin Zhang, Yuan Zhou
2017 A* conf
SODA
Xi Chen, Sivakanth Gopi, Jieming Mao, Jon Schneider
2017 J jnl
CoRR
Xi Chen, Yining Wang, Yu-Xiang Wang
2017 J jnl
CoRR
Rui Gao, Xi Chen, Anton J. Kleywegt
2016 J jnl
CoRR
Xi Chen, Sivakanth Gopi, Jieming Mao, Jon Schneider
2015 J jnl
Oper. Res. Lett.
Qihang Lin, Xi Chen, Javier Peña
2015 J jnl
Oper. Res.
Xi Chen, Jiawei Zhang, Yuan Zhou
2014 J jnl
Optim. Methods Softw.
Qihang Lin, Xi Chen, Javier Peña
2014 J jnl
Comput. Optim. Appl.
Qihang Lin, Xi Chen, Javier Peña
2014 A* conf
ICML
Yuan Zhou, Xi Chen, Jian Li
2013
Xi Chen
2013 conf
NIPS
Chong Wang, Xi Chen, Alexander J. Smola, Eric P. Xing
2012 A conf
SDM
Xi Chen, Jingrui He, Rick Lawrence, Jaime G. Carbonell
2012 J jnl
CoRR
Junming Yin, Xi Chen, Eric P. Xing
2012 A* conf
ICML
Junming Yin, Xi Chen, Eric P. Xing
2012 conf
NIPS
Xi Chen, Qihang Lin, Javier Peña
2012 J jnl
CoRR
Xi Chen, Qihang Lin, Seyoung Kim, Jaime G. Carbonell, Eric P. Xing
2012 A conf
AISTATS
Xi Chen, Han Liu, Jaime G. Carbonell
2011 A* conf
ICDM
Liang Xiong, Xi Chen, Jeff G. Schneider
2011 A conf
UAI
Xi Chen, Qihang Lin, Seyoung Kim, Jaime G. Carbonell, Eric P. Xing
2011 A conf
SDM
Xi Chen, Yanjun Qi, Bing Bai, Qihang Lin, Jaime G. Carbonell
2010 J jnl
CoRR
Xi Chen, Qihang Lin, Seyoung Kim, Javier Peña, Jaime G. Carbonell, Eric P. Xing
2010 J jnl
CoRR
Xi Chen, Seyoung Kim, Qihang Lin, Jaime G. Carbonell, Eric P. Xing
2010 conf
NIPS
Han Liu, Xi Chen, John D. Lafferty, Larry A. Wasserman
2010 A* conf
ICDM
Xi Chen, Bing Bai, Yanjun Qi, Qihang Lin, Jaime G. Carbonell
2010 A* conf
AAAI
Xi Chen, Yan Liu, Han Liu, Jaime G. Carbonell
2010 conf
NIPS
Han Liu, Xi Chen
2010 A conf
SDM
Liang Xiong, Xi Chen, Tzu-Kuo Huang, Jeff G. Schneider, Jaime G. Carbonell
2009 A* conf
ICDM
Xi Chen, Weike Pan, James T. Kwok, Jaime G. Carbonell
2009 conf
NIPS
Han Liu, Xi Chen
redb/extractors/elf_extractors/elf_relocations.py
← Index redb/extractors/elf_extractors/elf_relocations.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 ELFRelocation


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

    def _get_relocation_type_string(self, reloc_type: int, machine_arch: str) -> str:
        """Convert relocation type number to human-readable string based on architecture."""
        # This is a simplified mapping - real implementation would need comprehensive
        # architecture-specific relocation type mappings

        common_types = {
            0: "R_NONE",
            1: "R_DIRECT",
            2: "R_PC_RELATIVE",
            3: "R_GOT",
            4: "R_PLT",
            5: "R_COPY",
            6: "R_GLOB_DAT",
            7: "R_JMP_SLOT",
            8: "R_RELATIVE"
        }

        # Architecture-specific mappings could be added here
        if machine_arch == "x86_64":
            x86_64_types = {
                1: "R_X86_64_64",
                2: "R_X86_64_PC32",
                3: "R_X86_64_GOT32",
                4: "R_X86_64_PLT32",
                5: "R_X86_64_COPY",
                6: "R_X86_64_GLOB_DAT",
                7: "R_X86_64_JUMP_SLOT",
                8: "R_X86_64_RELATIVE"
            }
            return x86_64_types.get(reloc_type, f"R_X86_64_{reloc_type}")
        elif machine_arch == "x86":
            i386_types = {
                1: "R_386_32",
                2: "R_386_PC32",
                3: "R_386_GOT32",
                4: "R_386_PLT32",
                5: "R_386_COPY",
                6: "R_386_GLOB_DAT",
                7: "R_386_JMP_SLOT",
                8: "R_386_RELATIVE"
            }
            return i386_types.get(reloc_type, f"R_386_{reloc_type}")

        return common_types.get(reloc_type, f"R_UNKNOWN_{reloc_type}")

    def _extract_relocation_data(self, relocation, section_name: str, machine_arch: str) -> Dict:
        """Extract data from a single relocation entry."""
        try:
            # Get relocation offset
            relocation_offset = relocation.entry.get('r_offset', 0)

            # Get relocation type
            relocation_type = relocation.entry.get('r_info_type', 0)

            # Get symbol index
            relocation_symbol_index = relocation.entry.get('r_info_sym', 0)

            # Get addend (only present in RELA sections)
            relocation_addend = None
            if hasattr(relocation.entry, 'r_addend'):
                relocation_addend = relocation.entry.get('r_addend', 0)

            # Get symbol name if available
            relocation_symbol_name = ""
            if hasattr(relocation, 'symbol') and relocation.symbol:
                relocation_symbol_name = relocation.symbol.name or f"<symbol_{relocation_symbol_index}>"
            else:
                relocation_symbol_name = f"<symbol_{relocation_symbol_index}>"

            # Get type string mapping
            relocation_type_str = self._get_relocation_type_string(relocation_type, machine_arch)

            return ELFRelocation(
                relocation_offset=relocation_offset,
                relocation_type=relocation_type,
                relocation_type_str=relocation_type_str,
                relocation_symbol_index=relocation_symbol_index,
                relocation_symbol_name=relocation_symbol_name,
                relocation_section=section_name,
                relocation_addend=relocation_addend
            )

        except Exception as e:
            self.log.error(f"Error extracting relocation data: {e}")
            return None

    def _extract_relocations_from_section(self, section, machine_arch: str) -> List[Dict]:
        """Extract all relocations from a relocation section."""
        relocations = []

        try:
            if not hasattr(section, 'iter_relocations'):
                return relocations

            section_name = section.name or f"<unnamed_section>"

            for relocation in section.iter_relocations():
                reloc_data = self._extract_relocation_data(relocation, section_name, machine_arch)
                if reloc_data:
                    relocations.append(reloc_data)

        except Exception as e:
            self.log.error(f"Error extracting relocations from section {section.name}: {e}")

        return relocations

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

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

            def extract_data(elf):
                # Get architecture for relocation type mapping
                machine_arch = self._get_architecture()
                all_relocations = []

                # Iterate through all sections looking for relocation sections with per-section error handling
                for section_index, section in enumerate(elf.iter_sections()):
                    try:
                        # Check if this is a relocation section (.rel or .rela)
                        if (section.name and
                            (section.name.startswith('.rel') or section.name.startswith('.rela')) and
                            hasattr(section, 'iter_relocations')):

                            section_relocations = self._extract_relocations_from_section(section, machine_arch)
                            all_relocations.extend(section_relocations)
                            self.log.debug(f"Extracted {len(section_relocations)} relocations from section {section.name}")
                    except Exception as e:
                        section_name = getattr(section, 'name', f'section_{section_index}')
                        self.log.warning(f"Error processing relocation section {section_name}: {e}")
                        # Continue processing other sections

                return all_relocations

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_relocations = result
            return self.elf_relocations

        except Exception as e:
            self.log.error(f"Error extracting ELF relocations {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_relocations
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no relocations (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all relocations
                data = []
                current_time = datetime.now(timezone.utc)
                for reloc in self.elf_relocations:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        reloc.relocation_offset,
                        reloc.relocation_type,
                        reloc.relocation_type_str,
                        reloc.relocation_symbol_index,
                        reloc.relocation_symbol_name,
                        reloc.relocation_addend,
                        reloc.relocation_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'relocation_offset', 'relocation_type', 'relocation_type_str',
                    'relocation_symbol_index', 'relocation_symbol_name',
                    'relocation_addend', 'relocation_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt64', 'UInt32', 'LowCardinality(String)',
                    'UInt32', 'LowCardinality(String)',
                    'Nullable(Int64)', 'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                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_relocations"