Wei Zhou

63 papers B 1C 1Misc 2Journal 50Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
Knowl. Based Syst.
Yugen Yi, Zehui Zhang, Litao Huang, Jingkai Guo, Yali Peng, Wei Zhou, Jianzhong Wang
2026 J jnl
Signal Process.
Wei Zhou, Lina Zuo, Yingyuan Wang, Dan Ma, Yuan Gao, Yugen Yi
2025 J jnl
IEEE Signal Process. Lett.
Wei Zhou, Guilin Guan, Wei Cui, Yugen Yi
2025 J jnl
Medical Biol. Eng. Comput.
Wei Zhou, Xuekun Yang, Jianhang Ji, Yugen Yi
2025 J jnl
Biomed. Signal Process. Control.
Yugen Yi, Bin Zhou, Yangtao Hu, Siwei Luo, Jin Gao, Yirui Jiang, Xinping Rao, Wei Zhou
2025 J jnl
Digit. Signal Process.
Yugen Yi, Yi He, Hong Li, Xuan Wu, Jiangyan Dai, Siwei Luo, Quancai Li, Wei Zhou
2025 J jnl
Knowl. Based Syst.
Yugen Yi, Yu Duan, Xuan Wu, Hong Li, Siwei Luo, Jiangyan Dai, Xinping Rao, Yirui Jiang, Wei Zhou
2025 J jnl
Biomed. Signal Process. Control.
Wei Zhou, Guilin Guan, Yugen Yi, Wei Cui, Yixin Chen
2025 J jnl
Biomed. Signal Process. Control.
Yugen Yi, Xuan Wu, Yi He, Han Wu, Bin Zhou, Siwei Luo, Jiangyan Dai, Yingkui Du, Wei Zhou
2024 conf
ICONIP (11)
Wei Zhou, Xiaorui Wang, Bin Zhou, Yugen Yi
2024 J jnl
Inf.
Yugen Yi, Haoming Zhang, Ningyi Zhang, Wei Zhou, Xiaomei Huang, Gengsheng Xie, Caixia Zheng
2024 conf
BIBM
Wei Zhou, Jianhang Ji, Wei Cui, Yugen Yi, Yixin Chen
2024 J jnl
Pattern Recognit.
Yugen Yi, Ningyi Zhang, Wei Zhou, Yanjiao Shi, Gengsheng Xie, Jianzhong Wang
2024 B conf
IEEE Big Data
Wenyou Du, Haihang Wang, Jiaming Shen, Guanglei Meng, He Li, Wei Zhou
2024 J jnl
Comput. Biol. Medicine
Longjun Huang, Ningyi Zhang, Yugen Yi, Wei Zhou, Bin Zhou, Jiangyan Dai, Jianzhong Wang
2024 J jnl
Inf.
Yugen Yi, Haoming Zhang, Ningyi Zhang, Wei Zhou, Xiaomei Huang, Gengsheng Xie, Caixia Zheng
2024 conf
ADMA (2)
Wenyou Du, Haihang Wang, Jiaming Shen, Guanglei Meng, Yuming Guo, Wei Zhou
2024 J jnl
Comput. Biol. Medicine
Wei Zhou, Xiaorui Wang, Xuekun Yang, Yangtao Hu, Yugen Yi
2024 J jnl
IEEE J. Biomed. Health Informatics
Wei Zhou, Jianhang Ji, Wei Cui, Yingyuan Wang, Yugen Yi
2023 J jnl
Comput. Biol. Medicine
Yugen Yi, Yan Jiang, Bin Zhou, Ningyi Zhang, Jiangyan Dai, Xin Huang, Qinqin Zeng, Wei Zhou
2023 J jnl
Comput. Biol. Medicine
Wei Zhou, Weiqi Bai, Jianhang Ji, Yugen Yi, Ningyi Zhang, Wei Cui
2023 conf
PRCV (5)
Wei Zhou, Jianhang Ji, Wei Cui, Yugen Yi
2022 J jnl
Int. J. Intell. Syst.
Wenle Wang, Wei Zhou, Jianhang Ji, Jikun Yang, Wei Guo, Zhaoxuan Gong, Yugen Yi, Jianzhong Wang
2022 J jnl
Int. J. Intell. Syst.
Wei Zhou, Yuhan Peng, Jianhang Ji, Jikun Yang, Weiqi Bai, Yugen Yi, Wenle Wang
2022 J jnl
Int. J. Intell. Syst.
Yugen Yi, Shumin Lai, Wenle Wang, Shicheng Li, Renbo Zhang, Yong Luo, Wei Zhou, Jianzhong Wang
2021 Misc conf
ICASSP
Changlu Guo, Márton Szemenyei, Yangtao Hu, Wenle Wang, Wei Zhou, Yugen Yi
2021 J jnl
Wirel. Commun. Mob. Comput.
Wei Zhou, Zhaoxuan Gong, Wei Guo, Nan Han, Shaojie Qiao
2021 J jnl
Sci. Program.
Yu Chen, Ruixin Fang, Ting Liang, Zongyu Sha, Shicheng Li, Yugen Yi, Wei Zhou, Huilin Song
2020 J jnl
J. Medical Imaging Health Informatics
Zhaoxuan Gong, Wei Guo, Wei Zhou, Dazhe Zhao, Wenjun Tan, Guodong Zhang
2020 J jnl
J. Medical Imaging Health Informatics
Zhaoxuan Gong, Wei Guo, Wei Zhou, Dazhe Zhao, Wenjun Tan, Guodong Zhang
2020 conf
ISICDM
Guodong Zhang, Zhaoxuan Gong, Rui Xu, Wei Guo, Dazhe Zhao, Wenjun Tan, Wei Zhou
2020 J jnl
Int. J. Mach. Learn. Cybern.
Wei Zhou, Shaojie Qiao, Yugen Yi, Nan Han, Yuqi Chen, Gang Lei
2020 J jnl
CoRR
Changlu Guo, Márton Szemenyei, Yugen Yi, Wei Zhou
2020 Misc conf
ICASSP
Changlu Guo, Márton Szemenyei, Yugen Yi, Ying Xue, Wei Zhou, Yangyuan Li
2020 J jnl
CoRR
Changlu Guo, Márton Szemenyei, Yugen Yi, Ying Xue, Wei Zhou, Yangyuan Li
2020 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Yugen Yi, Jianzhong Wang, Wei Zhou, Caixia Zheng, Jun Kong, Shaojie Qiao
2020 conf
ICONIP (1)
Changlu Guo, Márton Szemenyei, Yugen Yi, Wei Zhou, Haodong Bian
2020 J jnl
CoRR
Changlu Guo, Márton Szemenyei, Yugen Yi, Wei Zhou, Haodong Bian
2019 J jnl
Symmetry
Yuan Gao, Xiaosheng Yu, Chengdong Wu, Wei Zhou, Xiaonan Wang, Yaoming Zhuang
2019 J jnl
IEEE Access
Yuan Gao, Xiaosheng Yu, Chengdong Wu, Wei Zhou, Xiaonan Wang, Hao Chu
2019 J jnl
Medical Biol. Eng. Comput.
Wei Zhou, Yugen Yi, Jining Bao, Wenle Wang
2019 conf
ISICDM
Wei Guo, AdevianFairuz Pratama, Zhaoxuan Gong, Wei Zhou, Dazhe Zhao, Guodong Zhang
2019 J jnl
Pattern Recognit.
Yugen Yi, Jianzhong Wang, Wei Zhou, Yuming Fang, Jun Kong, Yinghua Lu
2019 J jnl
Comput. Math. Methods Medicine
Wei Zhou, Yugen Yi, Yuan Gao, Jiangyan Dai
2019 C conf
BIBE
Changlu Guo, Márton Szemenyei, Yang Pei, Yugen Yi, Wei Zhou
2018 J jnl
Soft Comput.
Yugen Yi, Shaojie Qiao, Wei Zhou, Caixia Zheng, Qinghua Liu, Jianzhong Wang
2018 J jnl
IEEE Trans. Instrum. Meas.
Wenyou Du, Wei Zhou
2018 J jnl
Comput. Math. Methods Medicine
Wei Zhou, Hao Wu, Chengdong Wu, Xiaosheng Yu, Yugen Yi
2018 J jnl
EURASIP J. Image Video Process.
Wei Zhou, Chengdong Wu, Jianzhong Wang, Xiaosheng Yu, Yugen Yi
2018 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Yuan Gao, Chengdong Wu, Xiaosheng Yu, Wei Zhou, Jiahui Wu
2018 J jnl
Signal Process. Image Commun.
Yugen Yi, Wei Zhou, Qinghua Liu, Guoliang Luo, Jianzhong Wang, Yuming Fang, Caixia Zheng
2018 J jnl
IEEE Access
Yugen Yi, Wei Zhou, Yanjiao Shi, Jiangyan Dai
2018 J jnl
IEEE Access
Jiangyan Dai, Yuqi Chen, Yugen Yi, Jining Bao, Lei Wang, Wei Zhou, Gang Lei
2017 J jnl
Comput. Math. Methods Medicine
Wei Zhou, Chengdong Wu, Dali Chen, Zhenzhu Wang, Yugen Yi, Wenyou Du
2017 J jnl
IEEE Access
Wei Zhou, Chengdong Wu, Yugen Yi, Wenyou Du
2017 J jnl
IEEE Access
Wei Zhou, Chengdong Wu, Dali Chen, Yugen Yi, Wenyou Du
2017 J jnl
Comput. Math. Methods Medicine
Wei Zhou, Chengdong Wu, Dali Chen, Zhenzhu Wang, Yugen Yi, Wenyou Du
2017 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Wei Zhou, Chengdong Wu, Yuan Gao, Xiaosheng Yu
2017 J jnl
IEEE Access
Yugen Yi, Wei Zhou, Chao Bi, Guoliang Luo, Yuanlong Cao, Yanjiao Shi
2017 J jnl
IEEE Access
Wei Zhou, Chengdong Wu, Yugen Yi, Guoliang Luo
2016 conf
CCPR (1)
Yugen Yi, Wei Zhou, Yanjiao Shi, Guoliang Luo, Jianzhong Wang
2016 conf
CCBR
Yugen Yi, Wei Zhou, Yuanlong Cao, Qinghua Liu, Jianzhong Wang
2014 J jnl
J. Electronic Imaging
Yugen Yi, Wei Zhou, Jianzhong Wang, Yanjiao Shi, Jun Kong
redb/extractors/elf_extractors/elf_notes.py
← Index redb/extractors/elf_extractors/elf_notes.py python
import inspect
import binascii
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 ELFNote


class ELFNotesExtractor(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_notes = []
        self.elastic_index = self.index_prefix + "-elf_notes"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_note_type_string(self, note_type: int, note_name: str) -> str:
        """Convert note type number to human-readable string."""

        # GNU-specific note types
        if note_name == "GNU":
            gnu_types = {
                1: "NT_GNU_ABI_TAG",
                2: "NT_GNU_HWCAP",
                3: "NT_GNU_BUILD_ID",
                4: "NT_GNU_GOLD_VERSION",
                5: "NT_GNU_PROPERTY_TYPE_0"
            }
            return gnu_types.get(note_type, f"NT_GNU_UNKNOWN_{note_type}")

        # Generic note types
        generic_types = {
            1: "NT_PRSTATUS",
            2: "NT_FPREGSET",
            3: "NT_PRPSINFO",
            4: "NT_TASKSTRUCT",
            5: "NT_AUXV",
            6: "NT_PSTATUS",
            7: "NT_FPREGS",
            8: "NT_PSINFO",
            9: "NT_PRCRED",
            10: "NT_UTSNAME",
            11: "NT_LWPSTATUS",
            12: "NT_LWPSINFO",
            13: "NT_PRFPXREG"
        }

        return generic_types.get(note_type, f"NT_UNKNOWN_{note_type}")

    def _format_note_description(self, note_desc, note_type: int, note_name: str) -> str:
        """Format note description based on type for human readability."""
        try:
            if not note_desc:
                return ""

            # Handle build ID specifically (common case)
            if note_name == "GNU" and note_type == 3:  # NT_GNU_BUILD_ID
                if isinstance(note_desc, bytes):
                    return binascii.hexlify(note_desc).decode('ascii')
                return str(note_desc)

            # Handle ABI tag
            if note_name == "GNU" and note_type == 1:  # NT_GNU_ABI_TAG
                if isinstance(note_desc, bytes) and len(note_desc) >= 16:
                    # ABI tag contains OS, major, minor, subminor
                    import struct
                    try:
                        os_val, major, minor, subminor = struct.unpack('<IIII', note_desc[:16])
                        os_names = {0: "Linux", 1: "GNU", 2: "Solaris", 3: "FreeBSD"}
                        os_name = os_names.get(os_val, f"OS_{os_val}")
                        return f"{os_name} {major}.{minor}.{subminor}"
                    except:
                        pass

            # For binary data, convert to hex
            if isinstance(note_desc, bytes):
                # Limit size for very large descriptions
                if len(note_desc) > 256:
                    return binascii.hexlify(note_desc[:256]).decode('ascii') + "..."
                return binascii.hexlify(note_desc).decode('ascii')

            # For string data
            if isinstance(note_desc, str):
                return note_desc

            # Fallback
            return str(note_desc)

        except Exception as e:
            self.log.error(f"Error formatting note description: {e}")
            return str(note_desc) if note_desc else ""

    def _extract_note_data(self, note, section_name: str) -> ELFNote:
        """Extract data from a single note entry."""
        try:
            # Get note properties
            note_name = note.get('n_name', '').rstrip('\x00') if note.get('n_name') else ""
            note_type_raw = note.get('n_type', 0)
            note_desc_raw = note.get('n_desc', b'')

            # Handle note_type - pyelftools may return string or int
            if isinstance(note_type_raw, str):
                # pyelftools returned the type as a string like 'NT_GNU_BUILD_ID'
                note_type_str = note_type_raw
                # Map known string types to integers
                note_type_map = {
                    'NT_GNU_ABI_TAG': 1,
                    'NT_GNU_HWCAP': 2,
                    'NT_GNU_BUILD_ID': 3,
                    'NT_GNU_GOLD_VERSION': 4,
                    'NT_GNU_PROPERTY_TYPE_0': 5,
                    'NT_PRSTATUS': 1,
                    'NT_FPREGSET': 2,
                    'NT_PRPSINFO': 3,
                    'NT_TASKSTRUCT': 4,
                    'NT_AUXV': 5,
                    'NT_PSTATUS': 6,
                    'NT_FPREGS': 7,
                    'NT_PSINFO': 8,
                    'NT_PRCRED': 9,
                    'NT_UTSNAME': 10,
                    'NT_LWPSTATUS': 11,
                    'NT_LWPSINFO': 12,
                    'NT_PRFPXREG': 13,
                }
                note_type = note_type_map.get(note_type_raw, 0)
            else:
                note_type = note_type_raw
                # Get human-readable type string
                note_type_str = self._get_note_type_string(note_type, note_name)

            # Format description
            note_desc = self._format_note_description(note_desc_raw, note_type, note_name)

            return ELFNote(
                note_name=note_name,
                note_type=note_type,
                note_type_str=note_type_str,
                note_desc=note_desc,
                note_section=section_name
            )

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

    def _extract_notes_from_sections(self, elf) -> List[Dict]:
        """Extract notes from note sections."""
        notes = []

        try:
            # Look for note sections
            for section in elf.iter_sections():
                if (section.name and
                    section.name.startswith('.note') and
                    hasattr(section, 'iter_notes')):

                    section_name = section.name
                    try:
                        for note in section.iter_notes():
                            note_data = self._extract_note_data(note, section_name)
                            if note_data:
                                notes.append(note_data)
                    except Exception as e:
                        self.log.debug(f"Could not process notes in section {section_name}: {e}")

        except Exception as e:
            self.log.error(f"Error extracting notes from sections: {e}")

        return notes

    def _extract_notes_from_segments(self, elf) -> List[Dict]:
        """Extract notes from PT_NOTE segments."""
        notes = []

        try:
            # Look for PT_NOTE segments
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_NOTE':
                    segment_name = f"PT_NOTE_segment_{segment.header.get('p_offset', 0)}"

                    try:
                        if hasattr(segment, 'iter_notes'):
                            for note in segment.iter_notes():
                                note_data = self._extract_note_data(note, segment_name)
                                if note_data:
                                    notes.append(note_data)
                    except Exception as e:
                        self.log.debug(f"Could not process notes in segment: {e}")

        except Exception as e:
            self.log.error(f"Error extracting notes from segments: {e}")

        return notes

    def tag(self):
        return Tag.ELF_NOTES.value if hasattr(Tag, 'ELF_NOTES') else "elf_notes"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                all_notes = []

                # Extract notes from note sections
                section_notes = self._extract_notes_from_sections(elf)
                all_notes.extend(section_notes)

                # Extract notes from PT_NOTE segments
                segment_notes = self._extract_notes_from_segments(elf)
                all_notes.extend(segment_notes)

                # Remove duplicates (same note might appear in section and segment)
                unique_notes = []
                seen_notes = set()
                for note in all_notes:
                    note_key = (note.note_name, note.note_type, note.note_desc)
                    if note_key not in seen_notes:
                        seen_notes.add(note_key)
                        unique_notes.append(note)

                return unique_notes

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_notes = result
            return self.elf_notes

        except Exception as e:
            self.log.error(f"Error extracting ELF notes {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_notes
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no notes found
                # None is reserved for actual errors

                # Prepare data arrays for all notes
                data = []
                current_time = datetime.now(timezone.utc)
                for note in self.elf_notes:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        note.note_name,
                        note.note_type,
                        note.note_type_str,
                        note.note_desc,
                        note.note_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'note_name', 'note_type', 'note_type_str',
                    'note_desc', 'note_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)', 'UInt32', 'LowCardinality(String)',
                    'String CODEC(ZSTD(3))', '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_notes"