Xianhua Han

41 papers B 5C 4Misc 2Journal 13Unranked 17
YearRankTypeTitle / Venue / Authors
2026 J jnl
Biomed. Signal Process. Control.
Quanyu E, Huiyan Jiang, Guoyu Tong, Zhaoshuo Diao, Xianhua Han, Zhimin Liu
2026 C conf
ICCE
Ibuki Naka, Rahul Kumar Jain, Yinhao Li, Xianhua Han, Atsuyuki Wada, Atsunori Kashiwagi, Yutaro Iwamoto, Kiyosumi Maeda, Yen-Wei Chen, Yuji Tezuka
2026 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
He Li, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Ruofeng Tong, Hongjie Hu, Shuzo Kanasaki, Yen-Wei Chen
2025 conf
MMM (1)
Yongqing Sun, Hong Liu, Qiong Chang, Xianhua Han
2025 J jnl
Appl. Soft Comput.
Quanyu E, Huiyan Jiang, Guoyu Tong, Xianhua Han
2025 Misc conf
ICASSP
Xianhua Han, Jian Wang
2024 J jnl
Biomed. Signal Process. Control.
Xing Wu, Zhi Li, Chenjie Tao, Xianhua Han, Yen-Wei Chen, Junfeng Yao, Jian Zhang, Qun Sun, Weimin Li, Yue Liu, Yike Guo
2024 conf
SCIS/ISIS
Siqiao Yi, Huiyan Jiang, Yang Zhou, Guoyu Tong, Rongfei Zeng, Xianhua Han, Yan Pei
2024 B conf
IJCNN
Xueyao Cui, Huiyan Jiang, Yang Zhou, Xianhua Han, Xuena Li, Yan Pei
2024 J jnl
Comput. Biol. Chem.
Yanqiu Wang, Tong Wang, Yi Cao, Xu Qiao, Xianhua Han, Zhi-Ping Liu
2023 J jnl
IEICE Trans. Inf. Syst.
He Li, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Akira Furukawa, Shuzo Kanasaki, Yen-Wei Chen
2023 conf
EMBC
Rahul Kumar Jain, Takahiro Sato, Ahmed M. El-Sayed, Taro Watasue, Tomohiro Nakagawa, Yutaro Iwamoto, Yinhao Li, Xianhua Han, Lanfen Lin, Hongjie Hu, Xiang Ruan, Yen-Wei Chen
2022 C conf
ICCE
He Li, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Ruofeng Tong, Hongjie Hu, Akira Furukawa, Shuzo Kanasaki, Yen-Wei Chen
2022 conf
MICCAI (8)
He Li, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Hongjie Hu, Yen-Wei Chen
2022 conf
GCCE
Weibin Wang, Fang Wang, Yunjun Yang, Yinhao Li, Jing Liu, Xianhua Han, Lanfen Lin, Ruofeng Tong, Hongjie Hu, Yen-Wei Chen
2022 conf
EMBC
Swathi Ananda, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Hongjie Hu, Yen-Wei Chen
2022 J jnl
IEEE J. Biomed. Health Informatics
Huimin Huang, Qingqing Chen, Lanfen Lin, Ming Cai, Qiaowei Zhang, Yutaro Iwamoto, Xianhua Han, Akira Furukawa, Shuzo Kanasaki, Yen-Wei Chen, Ruofeng Tong, Hongjie Hu
2022 conf
EMBC
Yang Ai, Panyanat Aonpong, Weibin Wang, Yinhao Li, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen
2022 J jnl
CoRR
Huimin Huang, Shiao Xie, Lanfen Lin, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Ruofeng Tong
2022 conf
EMBC
Rahul Kumar Jain, Takahiro Sato, Taro Watasue, Tomohiro Nakagawa, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Hongjie Hu, Xiang Ruan, Yen-Wei Chen
2022 B conf
ICIP
Zhe Liu, Xianhua Han, Jiande Sun, Yen-Wei Chen
2021 conf
EMBC
He Li, Yutaro Iwamoto, Xianhua Han, Akira Furukawa, Shuzo Kanasaki, Yen-Wei Chen
2021 C conf
ICCE
Ryo Hasegawa, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Hongjie Hu, Xiujun Cai, Yen-Wei Chen
2021 J jnl
IEEE Trans. Medical Imaging
Huimin Huang, Han Zheng, Lanfen Lin, Ming Cai, Hongjie Hu, Qiaowei Zhang, Qingqing Chen, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Ruofeng Tong
2020 J jnl
Commun. Inf. Syst.
Dong Liang, Yingying Xu, Lanfen Lin, Nan Zhou, Hongjie Hu, Qiaowei Zhang, Qingqing Chen, Xianhua Han, Yutaro Iwamoto, Yen-Wei Chen
2020 C conf
ICCE
Yusuke Yoshinobu, Yutaro Iwamoto, Xianhua Han, Lanfen Lin, Hongjie Hu, Qiaowei Zhang, Yen-Wei Chen
2020 Misc conf
ICASSP
Huimin Huang, Lanfen Lin, Ruofeng Tong, Hongjie Hu, Qiaowei Zhang, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Jian Wu
2020 J jnl
CoRR
Huimin Huang, Lanfen Lin, Ruofeng Tong, Hongjie Hu, Qiaowei Zhang, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Jian Wu
2020 conf
ISBI
Huimin Huang, Lanfen Lin, Ruofeng Tong, Hongjie Hu, Qiaowei Zhang, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Jian Wu
2019 conf
DART/MIL3ID@MICCAI
Xiao Chen, Lanfen Lin, Hongjie Hu, Qiaowei Zhang, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Ruofeng Tong, Jian Wu
2019 J jnl
IEEE J. Biomed. Health Informatics
Liying Peng, Yen-Wei Chen, Lanfen Lin, Hongjie Hu, Huali Li, Qingqing Chen, Xiaoli Ling, Dan Wang, Xianhua Han, Yutaro Iwamoto
2019 conf
EMBC
Weibin Wang, Qingqing Chen, Yutaro Iwamoto, Xianhua Han, Qiaowei Zhang, Hongjie Hu, Lanfen Lin, Yen-Wei Chen
2019 B conf
ICIP
Dong Liang, Ruofeng Tong, Jian Wu, Lanfen Lin, Xiao Chen, Hongjie Hu, Qiaowei Zhang, Qingqing Chen, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen
2019 conf
MICCAI (6)
Han Zheng, Lanfen Lin, Hongjie Hu, Qiaowei Zhang, Qingqing Chen, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Ruofeng Tong, Jian Wu
2019 J jnl
J. Comput. Biol.
Sihai Yang, Xianhua Han, Yen-Wei Chen
2018 conf
DMIP
Weibin Wang, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen, Qingqing Chen, Dong Liang, Lanfen Lin, Hongjie Hu, Qiaowei Zhang
2018 B conf
ICIP
Liying Peng, Lanfen Lin, Hongjie Hu, Huali Li, Xiaoli Ling, Dan Wang, Xianhua Han, Yutaro Iwamoto, Yen-Wei Chen
2018 conf
MICCAI (2)
Dong Liang, Lanfen Lin, Hongjie Hu, Qiaowei Zhang, Qingqing Chen, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen
2018 conf
PRICAI (1)
Dong Liang, Lanfen Lin, Hongjie Hu, Qiaowei Zhang, Qingqing Chen, Yutaro Iwamoto, Xianhua Han, Yen-Wei Chen
2014 conf
IDT/IIMSS/STET
Yen-Wei Chen, Amir Hossein Foruzan, Chunhua Dong, Tomoko Tateyama, Xianhua Han
2006 B conf
Image Processing
Yen-Wei Chen, Xianhua Han
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"