Xiaofei Huang

80 papers A* 1A 4B 6C 1Misc 3Journal 46Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
NeuroImage
Xiuhang Ruan, Shuwen Bu, Yuting Li, Riyu Guo, Mengfan Wang, Xiaofei Huang, Ting Wang, Mengyan Li, Xinhua Wei
2025 A* conf
AAAI
Xiaofei Huang, Wenting Chen, Jie Liu, Qisheng Lu, Xiaoling Luo, Linlin Shen
2025 J jnl
IEEE Trans. Instrum. Meas.
Dinghui Gong, Zitong Xu, Xiaofei Huang, Di Gong, Chang Liu, Xing Heng, Fan Wang, Weiyi Wang, Kai Wei, Wei Quan
2025 J jnl
IEEE Trans. Instrum. Meas.
Xiaofei Huang, Yuedong Xie, Fulu Liu, Lijun Xu
2025 C conf
ISC
Xiaofei Huang, Xiaojie Zhu, Chi Chen
2025 A conf
WACV
Xiaofei Huang, Elaheh Hatamimajoumerd, Amal Mathew, Sarah Ostadabbas
2025 A conf
RAID
Xiaofei Huang, Xiaojie Zhu, Chi Chen, Paulo Esteves Veríssimo
2025 J jnl
IEEE Trans. Instrum. Meas.
Saixin Zhou, Kai Wei, Xiaofei Huang, Yang rui, Xing Heng, Jie Zheng, Wei Quan
2025 conf
I2MTC
Xiaofei Huang, Yuedong Xie, Fulu Liu, Jiyao Li, Huiyuan Kong, Lijun Xu
2024 J jnl
IEEE Trans. Instrum. Meas.
Fulu Liu, Zhiying Li, Xiaofei Huang, Linhui Ma, Jiyao Li, Hang Pu, Jun Long, Lijun Xu, Yuedong Xie
2024 J jnl
IEEE Trans. Medical Imaging
Xiaofei Huang, Hongfang Gong
2024 conf
CNML
Wei Ma, Xiaofei Huang, Jaydar Jingus, Fei Shu, Weilin Liu
2024 J jnl
IEEE Access
Zheng Zhang, Qingshan Tong, Xiaofei Huang
2024 J jnl
IEEE Trans. Instrum. Meas.
Zitong Xu, Kai Wei, Chang Liu, Xing Heng, Xiaofei Huang, Dinghui Gong, Fan Wang, Yueyang Zhai, Wei Quan
2024 conf
WACV (Workshops)
Elaheh Hatamimajoumerd, Pooria Daneshvar Kakhaki, Xiaofei Huang, Lingfei Luan, Somaieh Amraee, Sarah Ostadabbas
2024 J jnl
CoRR
Xiaofei Huang, Wenting Chen, Jie Liu, Qisheng Lu, Xiaoling Luo, Linlin Shen
2024 J jnl
Comput. Biol. Medicine
Xuqiong Luo, Hao Zhang, Xiaofei Huang, Hongfang Gong, Jin Zhang
2024 J jnl
IEEE J. Biomed. Health Informatics
Xiaofei Huang, Hongfang Gong, Jin Zhang
2024 J jnl
Appl. Soft Comput.
Jing Li, Yukun Liu, Hongfang Gong, Xiaofei Huang
2023 J jnl
Comput. Biol. Medicine
Shaotong Zhu, Sarah M. Ismail Hosni, Xiaofei Huang, Michael Wan, Seyyed Bahram Borgheai, John McLinden, Yalda Shahriari, Sarah Ostadabbas
2023 conf
I2MTC
Pu Huang, Hang Pu, Xiaofei Huang, Zhiying Li, Lijun Xu, Yuedong Xie
2023 B conf
FG
Michael Wan, Xiaofei Huang, Bethany Tunik, Sarah Ostadabbas
2023 J jnl
IEEE Trans. Instrum. Meas.
Zitong Xu, Kai Wei, Xiaofei Huang, Dinghui Gong, Weiyi Wang, Chang Liu, Xing Heng, Fan Wang, Yueyang Zhai, Wei Quan
2023 J jnl
CoRR
Elaheh Hatamimajoumerd, Pooria Daneshvar Kakhaki, Xiaofei Huang, Lingfei Luan, Somaieh Amraee, Sarah Ostadabbas
2023 A conf
WACV
Xiaofei Huang, Michael Wan, Lingfei Luan, Bethany Tunik, Sarah Ostadabbas
2023 J jnl
IEEE Access
Hongfang Gong, Can Wang, Xiaofei Huang
2023 J jnl
CoRR
Xiaofei Huang, Hongfang Gong, Jin Zhang
2023 conf
CVPR Workshops
Xiaofei Huang, Lingfei Luan, Elaheh Hatamimajoumerd, Michael Wan, Pooria Daneshvar Kakhaki, Rita Obeid, Sarah Ostadabbas
2023 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Shuangjun Liu, Xiaofei Huang, Nihang Fu, Cheng Li, Zhongnan Su, Sarah Ostadabbas
2023 J jnl
IEEE Trans. Instrum. Meas.
Xing Heng, Kai Wei, Tian Zhao, Zitong Xu, Qian Cao, Xiaofei Huang, Yueyang Zhai, Mao Ye, Wei Quan
2022 J jnl
CoRR
Xiaofei Huang, Hongfang Gong
2022 J jnl
Neuroinformatics
Sarah M. Ismail Hosni, Seyyed Bahram Borgheai, John McLinden, Shaotong Zhu, Xiaofei Huang, Sarah Ostadabbas, Yalda Shahriari
2022 J jnl
IEEE Access
Hao Gu, Meng Yang, Chongshi Gu, Xiaofei Huang
2022 conf
ICPR Workshops (1)
Xiaofei Huang, Shuangjun Liu, Michael Wan, Nihang Fu, David Li Pino, Bharath R. Modayur, Sarah Ostadabbas
2022 J jnl
CoRR
Michael Wan, Xiaofei Huang, Bethany Tunik, Sarah Ostadabbas
2022 J jnl
CoRR
Xiaofei Huang, Michael Wan, Lingfei Luan, Bethany Tunik, Sarah Ostadabbas
2022 B conf
ICPR
Michael Wan, Shaotong Zhu, Lingfei Luan, Prateek Gulati, Xiaofei Huang, Rebecca Schwartz-Mette, Marie Hayes, Emily Zimmerman, Sarah Ostadabbas
2022 J jnl
IEEE Signal Process. Mag.
Shuangjun Liu, Xiaofei Huang, Lucio Marcenaro, Sarah Ostadabbas
2022 conf
EMBC
Xiaofei Huang, Jennifer Mak, Anna Wears, Rebecca B. Price, Murat Akçakaya, Sarah Ostadabbas, Mary L. Woody
2021 conf
EMBC
Shaotong Zhu, Sarah M. Ismail Hosni, Xiaofei Huang, Seyyed Bahram Borgheai, John McLinden, Yalda Shahriari, Sarah Ostadabbas
2021 J jnl
Reliab. Eng. Syst. Saf.
Aihua Liu, Ke Chen, Xiaofei Huang, Didi Li, Xiaochun Zhang
2021 conf
EMBC
Deniz Kocanaogullari, Xiaofei Huang, Jennifer Mak, Minmei Shih, Elizabeth Skidmore, George F. Wittenberg, Sarah Ostadabbas, Murat Akçakaya
2021 conf
EMBC
Sarah M. Ismail Hosni, Seyyed Bahram Borgheai, John McLinden, Shaotong Zhu, Xiaofei Huang, Sarah Ostadabbas, Yalda Shahriari
2021 J jnl
CoRR
Shuangjun Liu, Xiaofei Huang, Nihang Fu, Sarah Ostadabbas
2021 J jnl
CoRR
Michael Wan, Shaotong Zhu, Prateek Gulati, Lingfei Luan, Xiaofei Huang, Rebecca Schwartz-Mette, Marie Hayes, Emily Zimmerman, Sarah Ostadabbas
2021 B conf
FG
Xiaofei Huang, Nihang Fu, Shuangjun Liu, Sarah Ostadabbas
2020 J jnl
CoRR
Xiaofei Huang, Nihang Fu, Sarah Ostadabbas
2020 J jnl
CoRR
Shuangjun Liu, Xiaofei Huang, Nihang Fu, Cheng Li, Zhongnan Su, Sarah Ostadabbas
2019 conf
MLSP
Xiaofei Huang, Behnaz Rezaei, Sarah Ostadabbas
2019 conf
CVPR Workshops
Xiaofei Huang, Alaina Martens, Emily Zimmerman, Sarah Ostadabbas
2019 J jnl
CoRR
Xiaofei Huang, Alaina Martens, Emily Zimmerman, Sarah Ostadabbas
2017 Misc conf
ICASSP
Behnaz Rezaei, Xiaofei Huang, Jason R. Yee, Sarah Ostadabbas
2015 conf
CyberC
Xiaofei Huang, Hui Zhou, Wei Wu
2013 conf
SOSE
Xiaofei Huang, Xiaoying Bai, Richard M. Lee
2013 conf
ICSI (1)
Xiaofei Huang
2013 conf
AST@ICSE
Xiaoying Bai, Muyang Li, Xiaofei Huang, Wei-Tek Tsai, Jerry Zeyu Gao
2011 conf
SOSE
Guang Chen, Xiaoying Bai, Xiaofei Huang, Muyang Li, Lizhu Zhou
2010 J jnl
CoRR
Xiaofei Huang
2009 J jnl
CoRR
Xiaofei Huang
2009 J jnl
CoRR
Xiaofei Huang
2009 J jnl
CoRR
Xiaofei Huang
2007 J jnl
CoRR
Xiaofei Huang
2006 J jnl
CoRR
Xiaofei Huang, Xiaowu Huang
2006 J jnl
CoRR
Xiaofei Huang
2006 J jnl
CoRR
Xiaofei Huang, Suquan Ding, Zhixing Yang, Youshou Wu
2006 J jnl
CoRR
Xiaofei Huang
2006 conf
ICIC (2)
Xiaofei Huang
2005 J jnl
CoRR
Xiaofei Huang
2005 B conf
IJCNN
Xiaofei Huang
2005 Misc conf
COCOON
Xiaofei Huang
2005 J jnl
CoRR
Xiaofei Huang
2005 B conf
ISIT
Xiaofei Huang
2004 A conf
CP
Xiaofei Huang
2004 conf
DAGM-Symposium
Xiaofei Huang
2004 B conf
ICIP
Xiaofei Huang
2003 J jnl
SIGACT News
Xiaofei Huang
1994 J jnl
New Gener. Comput.
Juan Gu, Xiaofei Huang, Bin Du
1994 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Jun Gu, Xiaofei Huang
1993 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Xiaofei Huang, Jun Gu, Youshou Wu
1988 Misc conf
MVA
Xiaofei Huang, Xiaoqing Ding, Ning Xu, Youshou Wu
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"