Xiao-Min Hu

45 papers B 11C 5Journal 20Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Wen-Jin Qiu, Zhan-Xian Liang, Xiao-Min Hu, Jun Zhang, Wei-Neng Chen
2025 J jnl
IEEE Trans. Comput. Soc. Syst.
Guo Yang, Feng-Feng Wei, Xiao-Min Hu, Sang-Woon Jeon, Jun Zhang, Wei-Neng Chen
2025 J jnl
Swarm Evol. Comput.
Hao Cong, Xiao-Min Hu, Wei-Neng Chen, Wen Shi, Jun Zhang
2025 J jnl
IEEE Trans. Artif. Intell.
Xiao-Cheng Liao, Xiao-Min Hu, Xiang-Ling Chen, Yi Mei, Ya-Hui Jia, Wei-Neng Chen
2025 J jnl
Complex Intell. Syst.
Ji Tang, Xiao-Min Hu, Sang-Woon Jeon, Wei-Neng Chen
2025 J jnl
IEEE Trans. Evol. Comput.
Tai-You Chen, Wei-Neng Chen, Feng-Feng Wei, Xiao-Min Hu, Jun Zhang
2024 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Wen-Jin Qiu, Xiao-Min Hu, An Song, Jun Zhang, Wei-Neng Chen
2024 J jnl
Expert Syst. Appl.
Qiang Yang, Jia-Wei Ji, Xin Lin, Xiao-Min Hu, Xu-Dong Gao, Peilan Xu, Hong Zhao, Zhen-Yu Lu, Sang-Woon Jeon, Jun Zhang
2024 B conf
SMC
Jing-Yuan Chen, Feng-Feng Wei, Tai-You Chen, Xiao-Min Hu, Sang-Woon Jeon, Yang Wang, Wei-Neng Chen
2024 B conf
SMC
Bai-Jiang Yu, Feng-Feng Wei, Xiao-Min Hu, Sang-Woon Jeon, Wenjian Luo, Wei-Neng Chen
2024 B conf
SMC
Ming Gu, Wei-Neng Chen, Xiao-Min Hu, Sang-Woon Jeon
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Xiao-Cheng Liao, Ya-Hui Jia, Xiao-Min Hu, Wei-Neng Chen
2023 C conf
CSCWD
Xiao-Min Hu, Gang-Qi Wang, Min Li, Zi-Liang Chen
2023 J jnl
Appl. Soft Comput.
Zhi-Xuan Zhang, Wei-Neng Chen, Xiao-Min Hu
2023 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Feng-Feng Wei, Wei-Neng Chen, Wentao Mao, Xiao-Min Hu, Jun Zhang
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiao-Cheng Liao, Wei-Neng Chen, Xiao-Qi Guo, Jinghui Zhong, Xiao-Min Hu
2023 J jnl
IEEE Trans. Cybern.
Xiao-Qi Guo, Wei-Neng Chen, Feng-Feng Wei, Wentao Mao, Xiao-Min Hu, Jun Zhang
2023 conf
ICACI
Xiao-Min Hu, Yu-Hui Duan, Min Li, Ying Zeng
2023 C conf
CSCWD
Xiao-Min Hu, Yi-qian Zhao, Zhuo Yang
2023 C conf
CSCWD
Xiao-Min Hu, Jing-Hui Xu, Min Li, Ying Zeng, Yi Liu
2022 conf
GECCO Companion
Zi-Xing Li, Xiao-Qi Guo, Wei-Neng Chen, Xiao-Min Hu
2022 conf
GECCO Companion
Shi-Cheng Zha, Wei-Neng Chen, Wen-Jin Qiu, Xiao-Min Hu
2022 C conf
CSCWD
Xiao-Min Hu, Zi-Liang Chen, Zhuo Yang, Min Li, Ling Zhang
2022 J jnl
Complex Intell. Syst.
Wen Shi, Xiao-Min Hu, Wei-Neng Chen
2022 C conf
CSCWD
Xiao-Min Hu, Jia-Hua Pan, Min Li
2021 conf
ICACI
Chun-Yao Jiang, Xiao-Min Hu, Wei-Neng Chen
2021 conf
GECCO Companion
Ling-Yu Li, Wen-Jie Ou, Xiao-Min Hu, Wei-Neng Chen, An Song
2021 B conf
SMC
Xiao-Min Hu, Zi-Wen Guo
2021 J jnl
Appl. Soft Comput.
Xiao-Min Hu, Shou-Rong Zhang, Min Li, Jeremiah D. Deng
2021 B conf
SMC
Xiao-Min Hu, Wen-Wei Su, Min Li
2020 B conf
SMC
Li-Tao Tan, Wei-Neng Chen, Xiao-Min Hu
2020 conf
ICONIP (2)
Jian-Ping Xiao, Xiao-Min Hu, Wei-Neng Chen
2020 B conf
CEC
Ting Huang, Yue-Jiao Gong, Xiaoyan Li, Xiao-Min Hu, Jun Zhang
2020 B conf
CEC
An Song, Wei-Neng Chen, Xiao-Min Hu
2020 J jnl
IEEE Trans. Cogn. Dev. Syst.
Xue Yu, Wei-Neng Chen, Xiao-Min Hu, Tianlong Gu, Huaqiang Yuan, Yuren Zhou, Jun Zhang
2019 B conf
CEC
Jinghui Zhong, Linhao Li, Weili Liu, Liang Feng, Xiao-Min Hu
2019 conf
ICONIP (4)
Zhi-Min Huang, Wei-Neng Chen, Wen Shi, Xiao-Min Hu
2019 J jnl
Quantum Eng.
Xiao-Min Hu, Chao Zhang, Chengjie Zhang, Bi-Heng Liu, Yun-Feng Huang, Yongjian Han, Chuan-Feng Li, Guang-Can Guo
2019 B conf
CEC
Li-Jiao Wu, Zhi-Hui Zhan, Xiao-Min Hu, Ping Guo, Yanchun Zhang, Jun Zhang
2018 J jnl
Complex.
Jing Xiao, Jing-Jing Li, Xi-Xi Hong, Min-Mei Huang, Xiao-Min Hu, Yong Tang, Chang-Qin Huang
2018 conf
GECCO (Companion)
Zhi-Wei Zeng, Xiao-Min Hu, Min Li, Yu Luo
2017 J jnl
Inf. Sci.
Xiao-Min Hu, Fei-Long He, Wei-Neng Chen, Jun Zhang
2016 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Chih-Min Lin, Ming-Shu Yang, Fei Chao, Xiao-Min Hu, Jun Zhang
2016 conf
SSCI
Han-Yu Xie, Qiang Yang, Xiao-Min Hu, Wei-Neng Chen
2016 B conf
CEC
Fei-Long He, Wei-Neng Chen, Xiao-Min Hu
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"