Xiaojing Ye

84 papers A* 3A 3B 5Journal 57Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Xiaojing Ye
2026 J jnl
CoRR
Yunmei Chen, Chi Ding, Xiaojing Ye
2025 J jnl
CoRR
Hao Wu, Shu Liu, Xiaojing Ye, Haomin Zhou
2025 J jnl
J. Comput. Phys.
Nathan Gaby, Xiaojing Ye
2025 J jnl
CoRR
Nathan Gaby, Xiaojing Ye
2025 J jnl
CoRR
Chi Ding, Qingchao Zhang, Ge Wang, Xiaojing Ye, Yunmei Chen
2025 J jnl
J. Math. Imaging Vis.
Chi Ding, Qingchao Zhang, Ge Wang, Xiaojing Ye, Yunmei Chen
2025 J jnl
SIAM J. Numer. Anal.
Hao Wu, Shu Liu, Xiaojing Ye, Haomin Zhou
2025 J jnl
J. Comput. Phys.
Yijie Jin, Shu Liu, Hao Wu, Xiaojing Ye, Haomin Zhou
2024 J jnl
J. Electron. Test.
Yuling Shang, Songyi Wei, Chunquan Li, Xiaojing Ye, Lizhen Zeng, Wei Hu, Xiang He, Jinzhuo Zhou
2024 J jnl
CoRR
Nathan Gaby, Xiaojing Ye
2024 J jnl
Sensors
Feng Huang, Yunxiang Li, Xiaojing Ye, Jing Wu
2024 J jnl
SIAM J. Sci. Comput.
Nathan Gaby, Xiaojing Ye, Haomin Zhou
2024 J jnl
CoRR
Yijie Jin, Shu Liu, Hao Wu, Xiaojing Ye, Haomin Zhou
2024 J jnl
J. Sci. Comput.
Qingchao Zhang, Mehrdad Alvandipour, Wenjun Xia, Yi Zhang, Xiaojing Ye, Yunmei Chen
2023 J jnl
CoRR
Steven Zhou, Xiaojing Ye
2023 conf
CDC
Shaojun Ma, Mengxue Hou, Xiaojing Ye, Haomin Zhou
2023 conf
MICCAI (10)
Chi Ding, Qingchao Zhang, Ge Wang, Xiaojing Ye, Yunmei Chen
2023 J jnl
CoRR
Chi Ding, Qingchao Zhang, Ge Wang, Xiaojing Ye, Yunmei Chen
2023 A conf
UAI
Zhiwei Tang, Tsung-Hui Chang, Xiaojing Ye, Hongyuan Zha
2023 J jnl
CoRR
Nathan Gaby, Xiaojing Ye, Haomin Zhou
2023 J jnl
CoRR
Hao Wu, Shu Liu, Xiaojing Ye, Haomin Zhou
2022 conf
MICCAI (6)
Wanyu Bian, Qingchao Zhang, Xiaojing Ye, Yunmei Chen
2022 J jnl
CoRR
Wanyu Bian, Qingchao Zhang, Xiaojing Ye, Yunmei Chen
2022 J jnl
J. Imaging
Qingchao Zhang, Xiaojing Ye, Yunmei Chen
2022 conf
CDC
Nathan Gaby, Fumin Zhang, Xiaojing Ye
2021 A* conf
ICLR
Yujia Xie, Yixiu Mao, Simiao Zuo, Hongteng Xu, Xiaojing Ye, Tuo Zhao, Hongyuan Zha
2021 J jnl
CoRR
Wanyu Bian, Yunmei Chen, Xiaojing Ye
2021 J jnl
CoRR
Wanyu Bian, Yunmei Chen, Xiaojing Ye, Qingchao Zhang
2021 J jnl
J. Imaging
Wanyu Bian, Yunmei Chen, Xiaojing Ye, Qingchao Zhang
2021 J jnl
CoRR
Shushan He, Hongyuan Zha, Xiaojing Ye
2021 J jnl
SIAM J. Imaging Sci.
Yunmei Chen, Hongcheng Liu, Xiaojing Ye, Qingchao Zhang
2021 J jnl
CoRR
Zhiwei Tang, Tsung-Hui Chang, Xiaojing Ye, Hongyuan Zha
2021 J jnl
CoRR
Nathan Gaby, Fumin Zhang, Xiaojing Ye
2021 J jnl
CoRR
Qingchao Zhang, Mehrdad Alvandipour, Wenjun Xia, Yi Zhang, Xiaojing Ye, Yunmei Chen
2020 J jnl
CoRR
Yujia Xie, Yixiu Mao, Simiao Zuo, Hongteng Xu, Xiaojing Ye, Tuo Zhao, Hongyuan Zha
2020 J jnl
CoRR
Qingchao Zhang, Xiaojing Ye, Hongcheng Liu, Yunmei Chen
2020 J jnl
Comput. Optim. Appl.
Yunmei Chen, Xiaojing Ye, Wei Zhang
2020 conf
MLMIR@MICCAI
Wanyu Bian, Yunmei Chen, Xiaojing Ye
2020 J jnl
CoRR
Wanyu Bian, Yunmei Chen, Xiaojing Ye
2020 J jnl
CoRR
Yunmei Chen, Hongcheng Liu, Xiaojing Ye, Qingchao Zhang
2020 J jnl
CoRR
Haodong Sun, Haomin Zhou, Hongyuan Zha, Xiaojing Ye
2020 A* conf
NeurIPS
Shushan He, Hongyuan Zha, Xiaojing Ye
2020 J jnl
CoRR
Shushan He, Hongyuan Zha, Xiaojing Ye
2020 J jnl
CoRR
Gang Bao, Xiaojing Ye, Yaohua Zang, Haomin Zhou
2020 J jnl
J. Comput. Phys.
Yaohua Zang, Gang Bao, Xiaojing Ye, Haomin Zhou
2019 J jnl
SIAM J. Imaging Sci.
Yunmei Chen, Bin Li, Xiaojing Ye
2019 J jnl
J. Mach. Learn. Res.
Ruilin Li, Xiaojing Ye, Haomin Zhou, Hongyuan Zha
2019 J jnl
CoRR
Yaohua Zang, Gang Bao, Xiaojing Ye, Haomin Zhou
2018 J jnl
Int. J. Parallel Emergent Distributed Syst.
Liang Zhao, Wen-Zhan Song, Xiaojing Ye, Yujie Gu
2018 J jnl
SIAM J. Optim.
Benjamin Sirb, Xiaojing Ye
2018 J jnl
Networks Heterog. Media
Shui-Nee Chow, Xiaojing Ye, Hongyuan Zha, Haomin Zhou
2018 conf
ICLR
Jiachen Yang, Xiaojing Ye, Rakshit S. Trivedi, Huan Xu, Hongyuan Zha
2018 J jnl
CoRR
Ruilin Li, Xiaojing Ye, Haomin Zhou, Hongyuan Zha
2017 J jnl
CoRR
Jiachen Yang, Xiaojing Ye, Rakshit S. Trivedi, Huan Xu, Hongyuan Zha
2017 A* conf
ICML
Mehrdad Farajtabar, Jiachen Yang, Xiaojing Ye, Huan Xu, Rakshit S. Trivedi, Elias B. Khalil, Shuang Li, Le Song, Hongyuan Zha
2017 J jnl
CoRR
Mehrdad Farajtabar, Jiachen Yang, Xiaojing Ye, Huan Xu, Rakshit S. Trivedi, Elias Boutros Khalil, Shuang Li, Le Song, Hongyuan Zha
2017 A conf
AISTATS
Yichen Wang, Xiaojing Ye, Haomin Zhou, Hongyuan Zha, Le Song
2017 conf
NIPS
Yichen Wang, Xiaojing Ye, Hongyuan Zha, Le Song
2017 conf
NIPS
Shuai Xiao, Mehrdad Farajtabar, Xiaojing Ye, Junchi Yan, Xiaokang Yang, Le Song, Hongyuan Zha
2017 J jnl
CoRR
Shuai Xiao, Mehrdad Farajtabar, Xiaojing Ye, Junchi Yan, Le Song, Hongyuan Zha
2016 conf
IEEE BigData
Benjamin Sirb, Xiaojing Ye
2016 conf
NIPS
Mehrdad Farajtabar, Xiaojing Ye, Sahar Harati, Le Song, Hongyuan Zha
2016 J jnl
CoRR
Mehrdad Farajtabar, Xiaojing Ye, Sahar Harati, Le Song, Hongyuan Zha
2015 conf
IEEE BigData
Liang Zhao, Wen-Zhan Song, Xiaojing Ye
2015 J jnl
CoRR
Shui-Nee Chow, Xiaojing Ye, Hongyuan Zha, Haomin Zhou
2015 J jnl
Comput. Optim. Appl.
Shui-Nee Chow, Xiaojing Ye, Haomin Zhou
2014 J jnl
CoRR
Meizhu Liu, Le Lu, Xiaojing Ye, Shipeng Yu
2013 J jnl
IEEE Trans. Image Process.
Haili Zhang, Xiaojing Ye, Yunmei Chen
2013 B conf
ICIP
Meng Liu, Yunmei Chen, Yuyuan Ouyang, Xiaojing Ye, Feng Huang
2013 J jnl
Comput. Optim. Appl.
Yunmei Chen, William W. Hager, Maryam Yashtini, Xiaojing Ye, Hongchao Zhang
2012 B conf
ICIP
Haili Zhang, Yunmei Chen, Xiaojing Ye
2012 J jnl
SIAM J. Imaging Sci.
Yunmei Chen, William W. Hager, Feng Huang, Dzung T. Phan, Xiaojing Ye, Wotao Yin
2012 B conf
ICPR
Frank Nielsen, Meizhu Liu, Xiaojing Ye, Baba C. Vemuri
2012 B conf
ICIP
Maryam Yashtini, William W. Hager, Yunmei Chen, Xiaojing Ye
2011 A conf
CIKM
Meizhu Liu, Le Lu, Xiaojing Ye, Shipeng Yu, Heng Huang
2011 J jnl
IEEE Trans. Medical Imaging
Xiaojing Ye, Yunmei Chen, Feng Huang
2011 conf
ISABEL
Xiaojing Ye, Kefei Liu, Meizhu Liu
2011 J jnl
IEEE Trans. Medical Imaging
Xiaojing Ye, Yunmei Chen, Wei Lin, Feng Huang
2011 conf
ISABEL
Meizhu Liu, Kefei Liu, Xiaojing Ye
2011 conf
MICCAI (3)
Meizhu Liu, Le Lu, Xiaojing Ye, Shipeng Yu, Marcos Salganicoff
2009 conf
ISVC (1)
Xiaojing Ye, Yunmei Chen
2009 conf
IPCV
Xiaojing Ye, Yunmei Chen, Feng Huang
2008 B conf
ICIP
Xiaojing Ye, Yunmei Chen
redb/extractors/macho_extractors/macho_universal.py
← Index redb/extractors/macho_extractors/macho_universal.py python
import hashlib
import inspect
import json
from datetime import datetime, timezone
from typing import Any, List

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachOUniversal


class MachOUniversalExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_universal"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_UNIVERSAL.value

    def _extract_universal_info(self):
        """Extract Universal/FAT binary architecture information using new API."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Parse at Universal level first (new API requirement)
            self.macho.parse()

            # Get architectures using new API
            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            # Check if this is a FAT binary
            is_fat = len(architectures) > 1

            architecture_info = []

            # Extract info for each architecture
            for arch_name in architectures:
                try:
                    # Get general info for this architecture
                    general_info = self.macho.get_general_info(arch=arch_name)

                    # Get header info for this architecture
                    header_info = self.macho.get_macho_header(arch=arch_name)

                    # Get architecture-specific MachO instance for detailed analysis
                    arch_macho = self.macho.get_macho_for_arch(arch_name)

                    # Calculate architecture slice hash (if we can access the raw data)
                    arch_sha256 = None
                    arch_md5 = None
                    arch_sha1 = None

                    # For FAT binaries, try to get slice-specific info
                    if is_fat and arch_macho:
                        try:
                            # This would require access to the slice data
                            # For now, we'll use the general file info
                            arch_sha256 = general_info.get('SHA256', '') if general_info else ''
                            arch_md5 = general_info.get('MD5', '') if general_info else ''
                            arch_sha1 = general_info.get('SHA1', '') if general_info else ''
                        except Exception as e:
                            self.log.debug(f"Could not extract slice hash for {arch_name}: {e}")

                    architecture_info.append({
                        'architecture': arch_name,
                        'arch_sha256': arch_sha256,
                        'arch_md5': arch_md5,
                        'arch_sha1': arch_sha1,
                        'cputype': header_info.get('cputype') if header_info else None,
                        'cpusubtype': header_info.get('cpusubtype') if header_info else None,
                        'filetype': header_info.get('filetype') if header_info else None
                    })

                except Exception as e:
                    self.log.warning(f"Error extracting info for architecture {arch_name}: {e}")
                    continue

            # Create Universal dataclass
            macho_universal = MachOUniversal(
                is_fat=is_fat,
                architecture_count=len(architectures),
                architectures=architectures,
                architecture_info=architecture_info,
                fat_hash=self.sha256,
                fat_md5=self.md5,
                fat_sha1=self.sha1
            )

            return macho_universal

        except Exception as e:
            self.log.error(f"Error extracting MachO Universal info: {e}")
            return None

    def _extract_fat_architecture_mappings(self):
        """Extract detailed FAT binary architecture mappings for database relationships."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return []

        try:
            # Parse at Universal level first
            self.macho.parse()

            # Get architectures using new API
            architectures = self.macho.get_architectures()
            if not architectures or len(architectures) <= 1:
                return []  # Not a FAT binary

            mappings = []
            current_time = datetime.now(timezone.utc)

            # For each architecture, create a mapping record
            for arch_name in architectures:
                try:
                    # Get general info
                    general_info = self.macho.get_general_info()

                    # Create mapping record for FAT binary architecture table
                    mapping = {
                        'fat_hash': self.sha256,  # SHA256 of the FAT binary
                        'architecture': arch_name,
                        'arch_sha256': general_info.get('SHA256', '') if general_info else '',  # Will need proper slice extraction
                        'arch_md5': general_info.get('MD5', '') if general_info else '',
                        'arch_sha1': general_info.get('SHA1', '') if general_info else '',
                        'arch_filename': f"{general_info.get('Filename', '')}.{arch_name}" if general_info else '',
                        'analysis_date': current_time
                    }
                    mappings.append(mapping)

                except Exception as e:
                    self.log.warning(f"Error creating mapping for architecture {arch_name}: {e}")
                    continue

            return mappings

        except Exception as e:
            self.log.error(f"Error extracting FAT architecture mappings: {e}")
            return []

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            universal_info = self._extract_universal_info()
            return universal_info
        except Exception as e:
            self.log.error(f"Error extracting MachO Universal info: {e}")
            return None

    def extract_fat_binary_basic_properties_data(self):
        """Extract data needed for creating multiple BasicProperties records for FAT binaries.

        Returns:
            Tuple: (is_fat, fat_sha256, architectures_info) where:
                - is_fat: bool indicating if this is a FAT binary
                - fat_sha256: SHA256 of the FAT wrapper
                - architectures_info: dict with arch names and their hashes
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return False, None, {}

        try:
            # Parse at Universal level first
            self.macho.parse()

            # Get architectures using new API
            architectures = self.macho.get_architectures()
            if not architectures or len(architectures) <= 1:
                return False, None, {}  # Not a FAT binary

            # This is a FAT binary
            architectures_info = {}

            for arch_name in architectures:
                try:
                    # Get general info for this architecture
                    general_info = self.macho.get_general_info(arch=arch_name)

                    if general_info:
                        architectures_info[arch_name] = {
                            'sha256': general_info.get('SHA256', ''),
                            'md5': general_info.get('MD5', ''),
                            'sha1': general_info.get('SHA1', ''),
                            'filename': general_info.get('Filename', ''),
                            'filesize': general_info.get('Filesize', 0)
                        }
                except Exception as e:
                    self.log.warning(f"Error extracting info for architecture {arch_name}: {e}")
                    continue

            return True, self.sha256, architectures_info

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

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            universal_info = self.extract()
            if universal_info is None:
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Get architecture info for the binary
            try:
                if universal_info.is_fat:
                    # For FAT binaries, architecture fields should be NULL since it contains multiple
                    architecture_raw = None
                    architecture_str = None
                else:
                    # For single-arch binaries, get the actual architecture info
                    header_info = self.macho.get_macho_header()
                    architecture_raw = header_info.get('cputype', 0) if header_info else 0
                    architecture_str = universal_info.architectures[0] if universal_info.architectures else None
            except Exception as e:
                self.log.warning(f"Could not get architecture info for binary: {e}")
                architecture_raw = None
                architecture_str = None

            # Main Universal binary record
            data.append([
                self.sha256,                              # sha256
                self.md5,                                 # md5
                self.sha1,                                # sha1
                None,                                     # parent_sha256 (always None for main FAT binary)
                architecture_raw,                         # architecture (raw CPU type)
                architecture_str,                         # architecture_str (human-readable)
                universal_info.is_fat,                    # is_fat
                universal_info.architecture_count,       # architecture_count
                universal_info.architectures,            # architectures (array)
                json.dumps(universal_info.architecture_info[0] if len(universal_info.architecture_info) == 1 else {"architectures": universal_info.architecture_info}) if universal_info.architecture_info else None,  # architecture_info (JSON)
                current_time,                             # analysis_date
            ])

            column_names = [
                'sha256', 'md5', 'sha1', 'parent_sha256', 'architecture', 'architecture_str',
                'is_fat', 'architecture_count', 'architectures', 'architecture_info',
                'analysis_date'
            ]

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

            return (data, column_names, column_type_names)

        return None

    def prepare_fat_architecture_export_data(self) -> Any:
        """Prepare export data for the FAT binary architecture mapping table."""
        mappings = self._extract_fat_architecture_mappings()
        if not mappings:
            return None

        data = []
        for mapping in mappings:
            data.append([
                mapping['fat_hash'],
                mapping['architecture'],
                mapping['arch_sha256'],
                mapping['arch_md5'],
                mapping['arch_sha1'],
                mapping['arch_filename'],
                mapping['analysis_date'],
            ])

        column_names = [
            'fat_hash', 'architecture', 'arch_sha256', 'arch_md5', 'arch_sha1',
            'arch_filename', 'analysis_date'
        ]

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

        return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_macho_universal"

    # def get_fat_architecture_table(self) -> str:
    #     """Return table name for FAT binary architecture mappings."""
    #     return "redb_fat_binary_architectures"