Xiaojing Zhang

81 papers A 2B 3C 3Misc 2Journal 46Unranked 24
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Comput. Appl. Math.
Lu-Bin Cui, Shujing Yang, Xiaojing Zhang, Xingdong Zhao, Jinyun Yuan, Qi Wang
2026 A conf
CGO
Tianxiang Sui, Jianxin Lai, Long Li, Peng Yuan, Yan Liu, Qing Zhu, Xiaojing Zhang, Linjie Xiao, Mingzhe Zhang, Jingling Xue
2026 J jnl
CoRR
Xiaojing Zhang, Jun Chen, Guanghui Wang
2026 J jnl
Electron. Commer. Res.
Yongyi Zhou, Xiaojing Zhang, M. I. M. Wahab, Mark Goh, Elifcan Dursun
2025 A conf
CGO
Long Li, Jianxin Lai, Peng Yuan, Tianxiang Sui, Yan Liu, Qing Zhu, Xiaojing Zhang, Linjie Xiao, Wenguang Chen, Jingling Xue
2025 J jnl
CoRR
Yuying Ge, Yixiao Ge, Chen Li, Teng Wang, Junfu Pu, Yizhuo Li, Lu Qiu, Jin Ma, Lisheng Duan, Xinyu Zuo, Jinwen Luo, Weibo Gu, Zexuan Li, Xiaojing Zhang, Yangyu Tao, Han Hu, Di Wang, Ying Shan
2025 conf
ACL (Findings)
Xiaojing Zhang, Bochen Lyu
2025 J jnl
CoRR
Qianxi Fu, Youngjoon Suh, Xiaojing Zhang, Yoonjin Won
2025 J jnl
IEEE Internet Things Mag.
Hao Wang, Xiaojing Zhang
2025 J jnl
J. Comput. Methods Sci. Eng.
Hongyan Han, Xiaojing Zhang, Wei Zhang, Zhiyong Li, Linghe Fan, Chuxiao Chen
2025 J jnl
CoRR
Bochen Lyu, Xiaojing Zhang, Fangyi Zheng, He Wang, Zheng Wang, Zhanxing Zhu
2025 J jnl
J. Circuits Syst. Comput.
Xiaojing Zhang, Ruixia Shi
2025 J jnl
CoRR
Xiaojing Zhang
2025 J jnl
Proc. ACM Program. Lang.
Peng Yuan, Yan Liu, Jianxin Lai, Long Li, Tianxiang Sui, Linjie Xiao, Xiaojing Zhang, Qing Zhu, Jingling Xue
2025 J jnl
Intell. Decis. Technol.
Qi Gao, Xiaojing Zhang, Yiqian Wang
2025 conf
ASPLOS (1)
Yan Liu, Jianxin Lai, Long Li, Tianxiang Sui, Linjie Xiao, Peng Yuan, Xiaojing Zhang, Qing Zhu, Wenguang Chen, Jingling Xue
2025 J jnl
Ecol. Informatics
Yuxing Yan, Guoqiang Wang, Yinglan A, Xiaojing Zhang, Baolin Xue, Jin Wu, Yuntao Wang
2025 J jnl
Entertain. Comput.
Xiaojing Zhang
2025 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Yutian Wu, Zhijun Song, Xiaojing Zhang, Yang Yu, Jing Lv
2025 B conf
ICPADS
Xianji Cui, Jinhua Zhang, Xiaojing Zhang, Yan Lan, Shan Huang
2024 conf
ISOEN
Yingying Xue, Changming Chen, Shimeng Mou, Xiaojing Zhang, Hao Wan, Ping Wang
2024 J jnl
CoRR
Xinna Lin, Siqi Ma, Junjie Shan, Xiaojing Zhang, Shell Xu Hu, Tiannan Guo, Stan Z. Li, Kaicheng Yu
2024 J jnl
J. Cloud Comput.
Hongmin Gao, Pengfei Duan, Xiaofeng Pan, Xiaojing Zhang, Keke Ye, Ziyuan Zhong
2024 J jnl
Remote. Sens.
Siyuan Zhang, Yinglan A, Libo Wang, Yuntao Wang, Xiaojing Zhang, Yi Zhu, Guangwen Ma
2024 J jnl
J. Comput. Phys.
Jialin Hong, Baohui Hou, Liying Sun, Xiaojing Zhang
2024 J jnl
BMC Medical Imaging
Xiaomin Wang, Xiaojing Zhang
2024 conf
ISOEN
Xiaojing Zhang, Hangming Xiong, Jiaying Sun, Yanjie Hu, Yong Zhou, Hao Wan, TianXing Wang, Ping Wang
2023 J jnl
Comput. Appl. Math.
Lu-Bin Cui, Xiaojing Zhang
2023 conf
MMM (2)
Jinxin Guo, Jiaqiang Zhang, Xiaojing Zhang, Ming Ma
2023 J jnl
Comput. Vis. Media
Qiu Zhou, Manyi Li, Qiong Zeng, Andreas Aristidou, Xiaojing Zhang, Lin Chen, Changhe Tu
2023 Misc conf
ICASSP
Jinxin Guo, Jiaqiang Zhang, Shaojie Li, Xiaojing Zhang, Ming Ma
2023 J jnl
ISPRS Int. J. Geo Inf.
Liping Zhang, Xiaojing Zhang, Song Li
2023 J jnl
Appl. Math. Lett.
Yuan Zhou, Xiaojing Zhang, Chao Zhang, Junjing Jia, Wen-Xiu Ma
2023 J jnl
CoRR
Jialin Hong, Baohui Hou, Liying Sun, Xiaojing Zhang
2023 conf
CCRIS
Tingyi Ren, Hongmin Gao, Xiaojing Zhang, Peng Zhang, Haiquan Wang
2023 J jnl
Remote. Sens.
Lu Lu, Qiang Xue, Xiaojing Zhang, Changbo Qin, Lizhi Jia
2022 conf
ICSAI
Xiaojing Zhang, Dongshuo Zhao, Yaran Li, Yudong Liu, Gang Hu
2022 J jnl
Remote. Sens.
Hanwen Zhang, Baolin Xue, Guoqiang Wang, Xiaojing Zhang, Qingzhu Zhang
2022 J jnl
Int. J. Simul. Process. Model.
Qianqian Shao, Xiaojing Zhang, Chong Li, Yang Liu
2022 J jnl
Remote. Sens.
Xiaojing Zhang, Guoqiang Wang, Baolin Xue, Yuntao Wang, Libo Wang
2022 conf
ISOEN
Junyu Zhang, Xiaojing Zhang, Hangming Xiong, Weijie Yu, Keiing Ying, Hao Wan, Ping Wang
2022 J jnl
Int. J. Neural Syst.
Shijun Li, Ziyang Tang, Nanxin Jin, Qiansu Yang, Gang Liu, Tiefang Liu, Jianxing Hu, Sijun Liu, Ping Wang, Jingru Hao, Zhiqiang Zhang, Xiaojing Zhang, Jinfeng Li, Xin Wang, Zhenzhen Li, Yi Wang, Baijian Yang, Lin Ma
2021 J jnl
J. Syst. Sci. Complex.
Xiaojing Zhang, Yufu Chen
2021 conf
ICISCAE (ACM)
Xiaojing Zhang, Jianfeng Jiang
2021 conf
ICISCAE (ACM)
Jianfeng Jiang, Xiaojing Zhang
2021 B conf
PIMRC
Dawei Yin, Xiaojing Zhang, Xichao Shu, Guiying Yan, Guanghui Wang
2021 conf
ICSAI
Dongshuo Zhao, Yudong Liu, Xiaojing Zhang, Tianyi Liu, Zhi Hu, Yiran Zheng
2021 J jnl
CoRR
Bin Zhang, Yang Wu, Xiaojing Zhang, Ming Ma
2020 J jnl
J. Medical Imaging Health Informatics
Yanguang Shen, Jinlong Zhang, Peng Song, Lu Ma, Yan Zhong, Xiaojing Zhang, Haiyi Wang, Yingwei Wang, Hongtao Zhang, Zhonghua Sun, Huiyi Ye
2020 J jnl
Reliab. Eng. Syst. Saf.
Yu Gong, Pan Liu, Jun Zhang, Dedi Liu, Xiaoqi Zhang, Xiaojing Zhang
2020 J jnl
Neural Comput. Appl.
Shenglong Li, Xiaojing Zhang
2020 conf
BlockSys
Lan Di, Fan Wang, Lijian Wei, George Yuan, Tu Zeng, Qianyou Zhang, Xiaojing Zhang
2019 J jnl
IEEE Trans. Biomed. Eng.
Jiaming Chen, Ping Cheng, Yun-Na Sun, Yipin Wang, Xiaojing Zhang, Zhuoqing Yang, Guifu Ding
2019 J jnl
Symmetry
Xiaojing Zhang, Vladimir P. Gerdt, Yury A. Blinkov
2018 J jnl
Environ. Model. Softw.
Xiaojing Zhang, Pan Liu, Yan Zhao, Chao Deng, Zejun Li, Mengsi Xiong
2017 C conf
IECON
Winston García-Gabín, Erik Berglund, Huang Zhang, Kateryna Mishchenko, Xiaojing Zhang
2017 conf
VTC Spring
Xiaojing Zhang, Hao Wu, Qingyuan Li, Bin Pan
2017 conf
ICINCO (2)
Winston García-Gabín, Xiaojing Zhang
2016 conf
UEMCON
Xiaojing Zhang, Xuemei Li, Wei Yang, Ruoqiao Li
2016 C conf
IECON
Ning Xiong, Xiaojing Zhang
2015 conf
Kaleidoscope
Xiaojing Zhang, Peng Liu, Jiang Liu, Song Liu
2015 conf
ICCC Workshops
Xiaojing Zhang, Peng Liu, Jiang Liu, Song Liu
2014 conf
GCCE
Xiaojing Zhang, Peng Liu, Jiang Liu, Song Liu
2014 J jnl
IET Signal Process.
Hang Geng, Yan Liang, Xiaojing Zhang, Feng Yang
2014 J jnl
CoRR
Anil Aswani, Patrick Bouffard, Xiaojing Zhang, Claire J. Tomlin
2013 J jnl
J. Comput.
Xiaojing Zhang, Yajie Yue, Chenming Sha
2013 C conf
FUSION
Xiaojing Zhang, Yan Liang, Zengfu Wang, Feng Yang
2013 J jnl
J. Multim.
Xiaojing Zhang, Yajie Yue, Chenming Sha
2013 Misc conf
ICIG
Zhengzhong Gao, Xiaojing Zhang, Fujun Zhang, Xiang Gao
2012 B conf
ICPR
Xiaojing Zhang, Hua Zhang, Xiaochun Cao
2012 J jnl
J. Softw.
Chenming Sha, Xiaojing Zhang, Yajie Yue
2011 conf
ACII (1)
Dongmei Jiang, Yulu Cui, Xiaojing Zhang, Ping Fan, Isabel Gonzalez, Hichem Sahli
2011 conf
CSEE (3)
Xiaojing Zhang
2011 conf
BMEI
Xiaorui Chen, Xiaojing Zhang, Shaolin Wang, Xiqi Jian
2011 conf
CSEE (4)
Xiaojing Zhang
2011 J jnl
Appl. Math. Lett.
Dengfeng Li, Guochang Wu, Xiaojing Zhang
2010
Xiaojing Zhang
2010 conf
CCTA (2)
Chunmei Pei, Huiling Guo, Xiuqing Yang, Yangqiu Wang, Xiaojing Zhang, Hairong Ye
2009 J jnl
IET Commun.
Dapeng Wu, Yan Zhen, Muqing Wu, Xiaojing Zhang
2005 conf
EUSIPCO
Xiaojing Zhang, Martin Makundi, Timo I. Laakso
1998 J jnl
SIAM J. Appl. Math.
Alexander L. Frenkel, Xiaojing Zhang
redb/extractors/macho_extractors/macho_features.py
← Index redb/extractors/macho_extractors/macho_features.py python
import inspect
import json
from datetime import datetime, timezone
from typing import Any

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


class MachOFeaturesExtractor(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_features"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_macho_features_for_arch(self, arch_name):
        """Extract basic MachO features for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get general info using new API
            general_info = self.macho.get_general_info()
            if not general_info:
                return None

            # Get header info for this specific architecture
            header_raw = self.macho.get_macho_header(arch=arch_name)
            header_formatted = self.macho.get_macho_header(arch=arch_name, formatted=True)

            if not header_raw or not header_formatted:
                return None

            # Get entry point using new API
            entry_point = None
            try:
                entry_point_info = self.macho.get_entry_point(arch=arch_name)
                if entry_point_info:
                    if isinstance(entry_point_info, dict):
                        entry_point = entry_point_info.get('entryoff') or entry_point_info.get('entry_address')
                    else:
                        entry_point = entry_point_info
            except Exception as e:
                self.log.debug(f"No entry point found: {e}")

            # Get UUID using new API
            uuid = None
            try:
                uuid_info = self.macho.get_uuid(arch=arch_name)
                if uuid_info:
                    uuid = str(uuid_info)
            except Exception as e:
                self.log.debug(f"No UUID found: {e}")

            # Get version info using new API with formatting
            version_info = None
            version_info_str = None
            try:
                version_info = self.macho.get_version_info(arch=arch_name)
                version_info_str = self.macho.get_version_info(arch=arch_name, formatted=True)
            except Exception as e:
                self.log.debug(f"No version info found: {e}")

            # Get segments using new API
            segments = self.macho.get_segments(arch=arch_name)
            number_of_segments = len(segments) if segments else 0

            # Get dylib info using new API
            dylib_names = self.macho.get_dylib_names(arch=arch_name)
            number_of_dylibs = len(dylib_names) if dylib_names else 0

            # Count imports using new API
            imported_functions = self.macho.get_imported_functions(arch=arch_name)
            number_of_imports = sum(len(funcs) for funcs in imported_functions.values()) if imported_functions else 0

            # Count exports using new API
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)
            number_of_exports = sum(len(symbols) for symbols in exported_symbols.values()) if exported_symbols else 0

            # Get unique load command types using new API
            load_commands_set = self.macho.get_load_commands_set(arch=arch_name, formatted=True)
            if isinstance(load_commands_set, set):
                load_commands_set = sorted(list(load_commands_set))

            # Get architectures for listing purposes
            architectures = self.macho.get_architectures()

            # Determine binary properties
            is_64bit = header_raw.get('magic') in [0xFEEDFACF, 0xCFFAEDFE]  # MH_MAGIC_64, MH_CIGAM_64
            is_signed = self._is_signed()
            
            # Create MachO dataclass
            macho_features = MachO(
                # Raw values from new API
                magic=header_raw.get('magic', 0),
                cputype=header_raw.get('cputype', 0),
                cpusubtype=header_raw.get('cpusubtype', 0),
                filetype=header_raw.get('filetype', 0),
                ncmds=header_raw.get('ncmds', 0),
                sizeofcmds=header_raw.get('sizeofcmds', 0),
                flags=header_raw.get('flags', 0),
                architecture=header_raw.get('cputype', 0),  # Use cputype as architecture
                architectures=[arch_info.get('cputype', 0) for arch_info in [self.macho.get_macho_header(arch=arch) for arch in architectures] if arch_info],
                # Human-readable values from formatted API
                magic_str=header_formatted.get('magic', ''),
                cputype_str=header_formatted.get('cputype', ''),
                cpusubtype_str=header_formatted.get('cpusubtype', ''),
                filetype_str=header_formatted.get('filetype', ''),
                flags_str=header_formatted.get('flags', '').split(', ') if header_formatted.get('flags') else [],
                architecture_str=header_formatted.get('cputype', ''),
                architectures_str=[arch_info.get('cputype', '') for arch_info in [self.macho.get_macho_header(arch=arch, formatted=True) for arch in architectures] if arch_info],
                # Additional properties
                is_64bit=is_64bit,
                is_signed=is_signed,
                number_of_load_commands=header_raw.get('ncmds', 0),
                load_commands_set=load_commands_set,
                number_of_segments=number_of_segments,
                number_of_dylibs=number_of_dylibs,
                number_of_imports=number_of_imports,
                number_of_exports=number_of_exports,
                entry_point=entry_point,
                uuid=uuid,
                version_info=version_info,
                version_info_str=version_info_str
            )
            
            return macho_features
            
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None
            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            # For FAT binaries, return features for all architectures
            # For single arch, return just the single result
            if len(architectures) > 1:
                # FAT binary - return list of features for each architecture
                results = []
                for arch_name in architectures:
                    features = self._extract_macho_features_for_arch(arch_name)
                    if features:
                        # Add architecture identifier to the result
                        if hasattr(features, '__dict__'):
                            # If it's a dataclass, we can access its dict
                            features.arch_identifier = arch_name
                        results.append(features)
                return results
            else:
                # Single architecture - return single result
                return self._extract_macho_features_for_arch(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {e}")
            return None

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

            # Get architectures (macho is already parsed in __init__)
            try:
                architectures = self.macho.get_architectures()
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

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

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Extract features for this specific architecture
                macho_features = self._extract_macho_features_for_arch(arch_name)
                if not macho_features:
                    continue

                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific hash for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Architecture field (kept in features table for ORDER BY)
                architecture = macho_features.cputype    # Raw CPU type value

                data.append([
                    arch_sha256,                          # sha256 (architecture-specific)
                    architecture,                         # architecture (raw CPU type)
                    # Raw values
                    macho_features.magic,                 # magic
                    macho_features.cputype,               # cputype
                    macho_features.cpusubtype,            # cpusubtype
                    macho_features.filetype,              # filetype
                    macho_features.ncmds,                 # ncmds
                    macho_features.sizeofcmds,            # sizeofcmds
                    macho_features.flags,                 # flags
                    # Human-readable values
                    macho_features.magic_str,             # magic_str
                    macho_features.cputype_str,           # cputype_str
                    macho_features.cpusubtype_str,        # cpusubtype_str
                    macho_features.filetype_str,          # filetype_str
                    macho_features.flags_str,             # flags_str
                    # Other fields
                    macho_features.is_64bit,              # is_64bit
                    macho_features.is_signed,             # is_signed
                    macho_features.entry_point if macho_features.entry_point else None,           # entry_point
                    macho_features.uuid if macho_features.uuid else None,  # uuid
                    json.dumps(macho_features.version_info) if macho_features.version_info else "{}",  # version_info
                    json.dumps(macho_features.version_info_str) if macho_features.version_info_str else "{}",  # version_info_str
                    macho_features.load_commands_set,     # load_commands_set
                    macho_features.number_of_segments,    # number_of_segments
                    macho_features.number_of_dylibs,      # number_of_dylibs
                    macho_features.number_of_imports,     # number_of_imports
                    macho_features.number_of_exports,     # number_of_exports
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256', 'architecture',
                # Raw values
                'magic', 'cputype', 'cpusubtype', 'filetype', 'ncmds', 'sizeofcmds', 'flags',
                # Human-readable values
                'magic_str', 'cputype_str', 'cpusubtype_str', 'filetype_str', 'flags_str',
                # Other fields
                'is_64bit', 'is_signed',
                'entry_point', 'uuid', 'version_info', 'version_info_str', 'load_commands_set',
                'number_of_segments', 'number_of_dylibs', 'number_of_imports', 'number_of_exports',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'Nullable(UInt32)',
                # Raw values
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32',
                # Human-readable values
                'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'Array(LowCardinality(String))',
                # Other fields
                'UInt8', 'UInt8',
                'Nullable(UInt64)', 'Nullable(String)', 'JSON', 'JSON', 'Array(Nullable(String))',
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)
        
        return None

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