Xian Xiao

55 papers A* 2A 2Journal 27Unranked 23
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Fatemeh Saleh, Sadegh Aliakbarian, Charlie Hewitt, Lohit Petikam, Xian Xiao, Antonio Criminisi, Thomas J. Cashman, Tadas Baltrusaitis
2025 conf
OFC
Yequan Zhao, Xian Xiao, Antoine Descos, Yuan Yuan, Xinling Yu, Geza Kurczveil, Marco Fiorentino, Zheng Zhang, Raymond G. Beausoleil
2025 J jnl
CoRR
Yequan Zhao, Xian Xiao, Antoine Descos, Yuan Yuan, Xinling Yu, Geza Kurczveil, Marco Fiorentino, Zheng Zhang, Raymond G. Beausoleil
2025 conf
OFC
Bassem Tossoun, Di Liang, Stanley Cheung, Yuan Yuan, Xian Xiao, Yanir London, Bin Shi, Thomas Van Vaerenbergh, Geza Kurczveil, Marco Fiorentino, Raymond G. Beausoleil
2025 conf
OFC
Yiwei Peng, Sean Hooten, Xinling Yu, Thomas Van Vaerenbergh, Yuan Yuan, Xian Xiao, Bassem Tossoun, Stanley Cheung, Marco Fiorentino, Raymond G. Beausoleil
2025 J jnl
CoRR
Yequan Zhao, Xinling Yu, Xian Xiao, Zhixiong Chen, Ziyue Liu, Geza Kurczveil, Raymond G. Beausoleil, Sijia Liu, Zheng Zhang
2025 conf
OFC
Yuan Yuan, Stanley Cheung, Yiwei Peng, Di Liang, Bassem Tossoun, Geza Kurczveil, Yingtao Hu, Wayne V. Sorin, Zhihong Huang, Xian Xiao, Antoine Descos, Sean Hooten, Jongseo Baek, Marco Fiorentino, Raymond G. Beausoleil
2024 A* conf
SIGGRAPH Asia
Givi Meishvili, James Clemoes, Charlie Hewitt, Zafiirah Hosenie, Xian Xiao, Martin de La Gorce, Tibor Takács, Tadas Baltrusaitis, Antonio Criminisi, Chyna McRae, Nina Jablonski, Marta Wilczkowiak
2024 J jnl
CoRR
Givi Meishvili, James Clemoes, Charlie Hewitt, Zafiirah Hosenie, Xian Xiao, Martin de La Gorce, Tibor Takács, Tadas Baltrusaitis, Antonio Criminisi, Chyna McRae, Nina Jablonski, Marta Wilczkowiak
2024 conf
OFC
Xian Xiao, Stanley Cheung, Bassem Tossoun, Thomas Van Vaerenbergh, Geza Kurczveil, Raymond G. Beausoleil
2024 J jnl
CoRR
Yiwei Peng, Sean Hooten, Xinling Yu, Thomas Van Vaerenbergh, Yuan Yuan, Xian Xiao, Bassem Tossoun, Stanley Cheung, Marco Fiorentino, Raymond G. Beausoleil
2024 J jnl
CoRR
Yequan Zhao, Xian Xiao, Xinling Yu, Ziyue Liu, Zhixiong Chen, Geza Kurczveil, Raymond G. Beausoleil, Zheng Zhang
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiangfei Zhang, Yong Niu, Tao Yang, Xian Xiao, Jianwen Ding, Sheng Chen, Zhangdui Zhong, Ning Wang, Bo Ai
2023 J jnl
CoRR
Xiangfei Zhang, Yong Niu, Tao Yang, Xian Xiao, Jianwen Ding, Sheng Chen, Bo Ai, Zhangdui Zhong, Ning Wang
2023 J jnl
CoRR
Yequan Zhao, Xian Xiao, Geza Kurczveil, Raymond G. Beausoleil, Zheng Zhang
2023 conf
OFC
Xian Xiao, Stanley Cheung, Sean Hooten, Yiwei Peng, Bassem Tossoun, Thomas Van Vaerenbergh, Geza Kurczveil, Raymond G. Beausoleil
2022 conf
OFC
Geza Kurczveil, Xian Xiao, Antoine Descos, Sudharsanan Srinivasan, Di Liang, Raymond G. Beausoleil
2022 J jnl
J. Ind. Inf. Integr.
Xiong Li, Wei Pu, Jiang Rong, Xian Xiao, Xiaodong Zhao
2021 conf
ECOC
Mehmet Berkay On, Yun-Jhu Lee, Xian Xiao, Roberto Proietti, S. J. Ben Yoo
2021 conf
OFC
Yun-Jhu Lee, Mehmet Berkay On, Xian Xiao, S. J. Ben Yoo
2021 conf
OFC
Roberto Proietti, Zhiyan Liu, Xian Xiao, Xiaoliang Chen, S. J. Ben Yoo
2021 J jnl
Remote. Sens.
Xian Xiao, Xiushu Qie, Zhixiong Chen, Jingyu Lu, Lei Ji, Dongfang Wang, Lina Zhang, Mingxuan Chen, Min Chen
2021 J jnl
Remote. Sens.
Zhixiong Chen, Xiushu Qie, Juanzhen Sun, Xian Xiao, Yuxin Zhang, Dongjie Cao, Jing Yang
2021 J jnl
CoRR
Yun-Jhu Lee, Mehmet Berkay On, Xian Xiao, Roberto Proietti, S. J. Ben Yoo
2021 J jnl
CoRR
Akhilesh S. P. Khope, Anirban Samanta, Xian Xiao, S. J. Ben Yoo, John E. Bowers
2021 conf
OFC
Xian Xiao, S. J. Ben Yoo
2020 A conf
SC
Gengchen Liu, Roberto Proietti, Marjan Fariborz, Pouya Fotouhi, Xian Xiao, S. J. Ben Yoo
2020 J jnl
IEICE Trans. Commun.
Roberto Proietti, Xian Xiao, Marjan Fariborz, Pouya Fotouhi, Yu Zhang, S. J. Ben Yoo
2020 conf
OFC
Xian Xiao, Roberto Proietti, Gengchen Liu, Hongbo Lu, Yi-Chun Ling, Yu Zhang, S. J. Ben Yoo
2019 conf
MEMSYS
Sebastian Werner, Pouya Fotouhi, Xian Xiao, Marjan Fariborz, S. J. Ben Yoo, George Michelogiannakis, Dilip P. Vasudevan
2019 J jnl
JOCN
Pouya Fotouhi, Sebastian Werner, Roberto Proietti, Xian Xiao, S. J. Ben Yoo
2019 conf
OECC/PSC
Xian Xiao, Roberto Proietti, Sebastian Werner, Pouya Fotouhi, S. J. Ben Yoo
2019 J jnl
Remote. Sens.
Lei Ji, Haonan Chen, Lin Li, Baojun Chen, Xian Xiao, Min Chen, Guifu Zhang
2018 conf
ECOC
Xian Xiao, Roberto Proietti, Kaiqi Zhang, S. J. Ben Yoo
2018 J jnl
JOCN
Roberto Proietti, Xian Xiao, Kaiqi Zhang, Gengchen Liu, Hongbo Lu, Pouya Fotouhi, J. Messig, S. J. Ben Yoo
2018 conf
PACIS
Xian Xiao, Lingyun Qiu
2018 conf
NOCS
Sebastian Werner, Pouya Fotouhi, Roberto Proietti, Xian Xiao, S. J. Ben Yoo
2017 J jnl
Online Inf. Rev.
Jin Zhang, Ming Ren, Xian Xiao, Jilong Zhang
2017 J jnl
Comput. Biol. Chem.
Xian Xiao, Qianhua He, Li-Yan Yu, Song-Qing Wang, Yang Li, Hua Yang, Ai-Hua Zhang, Xiao-Hong Ma, Yu-Jie Peng, Bing Chen
2014 J jnl
J. Vis. Commun. Image Represent.
Chunjie Zhang, Xian Xiao, Junbiao Pang, Chao Liang, Yifan Zhang, Qingming Huang
2014 J jnl
IEEE Trans. Multim.
Weiqing Min, Changsheng Xu, Min Xu, Xian Xiao, Bing-Kun Bao
2012 J jnl
IEEE Trans. Multim.
Xian Xiao, Changsheng Xu, Jinqiao Wang, Min Xu
2011 conf
J-HGBU@MM
Xian Xiao, Changsheng Xu, Jinqiao Wang, Min Xu
2010 A* conf
ACM Multimedia
Xian Xiao, Changsheng Xu, Jinqiao Wang
2010 A conf
ICME
Xian Xiao, Changsheng Xu, Yong Rui
2009 J jnl
Graph. Model.
Ying He, Xian Xiao, Hock Soon Seah
2009
Xian Xiao
2008 J jnl
Comput. Animat. Virtual Worlds
Linbo Luo, Suiping Zhou, Wentong Cai, Malcolm Yoke Hean Low, Feng Tian, Yongwei Wang, Xian Xiao, Dan Chen
2008 conf
Shape Modeling International
Ying He, Xian Xiao, Hock Soon Seah
2008 conf
CCNC
Xian Xiao, Seah Hock Soon, Feng Tian
2006 conf
IMSCCS (1)
Yinbo Shao, Yongliang Wang, Qiang Li, Xian Xiao
2005 conf
Advances in Computer Entertainment Technology
Seah Hock Soon, Zhongke Wu, Feng Tian, Xian Xiao, Boya Xie
2005 conf
Advances in Computer Entertainment Technology
Seah Hock Soon, Zhongke Wu, Feng Tian, Xian Xiao, Boya Xie
2003 J jnl
Theor. Comput. Sci.
Zhaohui Zhu, Bin Li, Xian Xiao, Shifu Chen, Wujia Zhu
2003 J jnl
Theor. Comput. Sci.
Zhaohui Zhu, Xian Xiao, Yong Zhou, Wujia Zhu
redb/extractors/elf_extractors/elf_exports.py
← Index redb/extractors/elf_extractors/elf_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Set

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 ELFExport


class ELFExportExtractor(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_exports = None
        self.elastic_index = self.index_prefix + "-elf_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_exported_functions_from_symbols(self, elf) -> Set[str]:
        """Extract exported functions from symbol tables."""
        exported_functions = set()

        try:
            # Check both static (.symtab) and dynamic (.dynsym) symbol tables
            symbol_sections = ['.symtab', '.dynsym']

            for section_name in symbol_sections:
                section = elf.get_section_by_name(section_name)
                if not section or not hasattr(section, 'iter_symbols'):
                    continue

                for symbol in section.iter_symbols():
                    # Check if symbol is exported (defined and globally visible)
                    if (symbol.name and
                        symbol.entry.get('st_shndx', 0) != 'SHN_UNDEF' and  # Not undefined
                        symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK'] and  # Global or weak binding
                        symbol.entry.get('st_info', {}).get('type') in ['STT_FUNC', 'STT_OBJECT']):  # Function or object

                        # Additional checks for meaningful exports
                        if (symbol.entry.get('st_value', 0) > 0 or  # Has a value
                            symbol.entry.get('st_size', 0) > 0):    # Has a size
                            exported_functions.add(symbol.name)

        except Exception as e:
            self.log.error(f"Error extracting exported functions from symbols: {e}")

        return exported_functions

    def _get_exported_functions_from_dynamic_section(self, elf) -> Set[str]:
        """Extract exported functions information from dynamic section."""
        exported_functions = set()

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return exported_functions

            # Look for version definition sections that might indicate exports
            # This is complementary to symbol table analysis
            for tag in dynamic_section.iter_tags():
                if tag.entry.d_tag == 'DT_SONAME':
                    # If it has a SONAME, it's likely a shared library with exports
                    # The actual exports are still found in symbol tables
                    pass

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

        return exported_functions

    def _filter_meaningful_exports(self, exports: Set[str]) -> Set[str]:
        """Filter out compiler-generated and internal symbols to focus on meaningful exports."""
        filtered_exports = set()

        # Common patterns to exclude (compiler-generated, internal symbols)
        exclude_patterns = [
            '_start',
            '_init',
            '_fini',
            '__libc_',
            '__gmon_start__',
            '_IO_stdin_used',
            '__data_start',
            '__bss_start',
            '_edata',
            '_end',
            '__TMC_END__',
            '_ITM_deregisterTMCloneTable',
            '_ITM_registerTMCloneTable',
            '__cxa_finalize',
            '__gxx_personality_v0',
            '_Jv_RegisterClasses'
        ]

        for export in exports:
            # Skip empty or very short names
            if not export or len(export) < 2:
                continue

            # Skip symbols that match exclude patterns
            skip = False
            for pattern in exclude_patterns:
                if export.startswith(pattern):
                    skip = True
                    break

            # Skip symbols that look like internal mangled names (but keep reasonable C++ names)
            if export.startswith('_Z') and len(export) > 50:  # Very long mangled names
                skip = True

            if not skip:
                filtered_exports.add(export)

        return filtered_exports

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

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

            def extract_data(elf):
                # Extract exported functions from multiple sources
                exported_functions = set()

                # From symbol tables (primary source)
                symbol_exports = self._get_exported_functions_from_symbols(elf)
                exported_functions.update(symbol_exports)

                # From dynamic section (supplementary)
                dynamic_exports = self._get_exported_functions_from_dynamic_section(elf)
                exported_functions.update(dynamic_exports)

                # Filter out compiler-generated and internal symbols
                meaningful_exports = self._filter_meaningful_exports(exported_functions)

                # Convert to sorted list for consistent output
                export_functions_list = sorted(list(meaningful_exports))

                # Return ELFExport dataclass
                return ELFExport(
                    elf_exports_total=len(export_functions_list),
                    elf_export_functions=export_functions_list,
                )

            if not self._is_elf_file():
                return None

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

            self.elf_exports = result
            return self.elf_exports

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

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.elf_exports.elf_exports_total,
                    self.elf_exports.elf_export_functions,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'elf_exports_total',
                    'elf_export_functions',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt32',
                    'Array(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_exports"