Xiaodan Wu

60 papers B 1C 2Misc 4Journal 46Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Chem. Inf. Model.
Yang Lv, Hongyu Xu, Yue Lei, Zeyan Jiang, Tong Li, Rui Yan, Xiaodan Wu, Yingxue Jin, Limin Zhang, Zhiqiang Wang
2026 J jnl
Comput. Ind. Eng.
Xiaodan Wu, Jing Du, Xiuxian Wang, Mohammad T. Khasawneh
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiaodan Wu, Fei Pan, Qicheng Zeng, Jianguang Wen, Gaofei Yin, Xingwen Lin, Dongqin You, Qing Xiao
2025 J jnl
Expert Syst. Appl.
Xiaodan Wu, Ruiying Li, Xuan Zhang, Changqing Cheng
2025 J jnl
NeuroImage
Zhaomin Yao, Weiming Xie, Jiaming Chen, Ying Zhan, Xiaodan Wu, Yingxin Dai, Yusong Pei, Zhiguo Wang, Guoxu Zhang
2025 J jnl
J. Chem. Inf. Model.
Yang Lv, Tong Li, Yue Lei, Zeyan Jiang, Hongyu Xu, Xiaodan Wu, Rui Yan, Yingxue Jin, Limin Zhang, Zhiqiang Wang
2025 J jnl
J. Chem. Inf. Model.
Hongyu Xu, Tong Li, Qi Wang, Yang Lv, Changhong Sun, Rui Yan, Xiaodan Wu, Yingxue Jin, Zhiqiang Wang
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Ququ Li, Jianguang Wen, Xiaodan Wu, Qing Xiao, Dongqin You, Rongqi Tang
2025 J jnl
Technol. Anal. Strateg. Manag.
Xiaodan Wu, Jing Du, Shanshan Lv, Changqing Cheng, Yanfang Huo
2024 J jnl
Comput. Ind. Eng.
Cong Cheng, Ruixue Shan, Xiaodan Wu, Shanshan Lv
2024 J jnl
Comput. Biol. Medicine
Zhaomin Yao, Fei Li, Weiming Xie, Jiaming Chen, Jiezhang Wu, Ying Zhan, Xiaodan Wu, Zhiguo Wang, Guoxu Zhang
2024 J jnl
Comput. Ind. Eng.
Shanshan Lv, Chengcheng Xia, Cong Cheng, Jianhai Yan, Xiaodan Wu
2024 J jnl
Int. J. Digit. Earth
Qicheng Zeng, Xiaodan Wu, Rongqi Tang, Jingping Wang, Xingwen Lin, Jianguang Wen, Qing Xiao
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Rongqi Tang, Xiaodan Wu, Jingping Wang, Zheng Li, Qicheng Zeng, Jianguang Wen, Qing Xiao
2023 J jnl
npj Digit. Medicine
Xiaodan Wu, Ruichang Li, Zhen He, Tianzhi Yu, Changqing Cheng
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xianglei Du, Xiaodan Wu, Rongqi Tang, Qicheng Zeng, Zheng Li, Jingping Wang, Zhiyong Jiang, Kaizhong Wang, Dongqin You, Jianguang Wen, Qing Xiao
2023 J jnl
Remote. Sens.
Hao Chen, Xingwen Lin, Yibo Sun, Jianguang Wen, Xiaodan Wu, Dongqin You, Juan Cheng, Zhenzhen Zhang, Zhaoyang Zhang, Chaofan Wu, Fei Zhang, Kechen Yin, Huaxue Jian, Xinyu Guan
2022 J jnl
Biomed. Signal Process. Control.
Xiaodan Wu, Yumeng Zheng, Chao-Hsien Chu, Lingyu Cheng, Jungyoon Kim
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jianguang Wen, Xingwen Lin, Xiaodan Wu, Yunfei Bao, Dongqin You, Baochang Gong, Yong Tang, Shengbiao Wu, Qing Xiao, Qinhuo Liu
2022 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Yuhe Zhao, Minyu Wang, Tianxiang Zhao, Yi Luo, Yuhan Li, Kai Yan, Lei Lu, Ngoc Nguyen Tran, Xiaodan Wu, Xuanlong Ma
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jingping Wang, Xiaodan Wu, Rongqi Tang, Qicheng Zeng, Zheng Li, Jianguang Wen, Qing Xiao
2022 J jnl
Int. J. Digit. Earth
Rongqi Tang, Xiaodan Wu, Jingping Wang, Qicheng Zeng, Zheng Li, Jianguang Wen
2022 J jnl
Ann. Oper. Res.
Xiaodan Wu, Ruichang Li, Chao-Hsien Chu, Richard Amoasi, Shan Liu
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
Xiaodan Wu, Jianguang Wen, Qing Xiao, Yunfei Bao, Dongqin You, Jingping Wang, Dujuan Ma, Xingwen Lin, Baochang Gong
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiaodan Wu, Jianguang Wen, Qing Xiao, Dongqin You, Baochang Gong, Jingping Wang, Dujuan Ma, Xingwen Lin
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jingping Wang, Xiaodan Wu, Jianguang Wen, Qing Xiao, Baochang Gong, Dujuan Ma, Yurong Cui, Xingwen Lin, Yunfei Bao
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jianguang Wen, Xingwen Lin, Xiaodan Wu, Yunfei Bao, Dongqin You, Baochang Gong, Yong Tang, Shengbiao Wu, Qing Xiao, Qinhuo Liu
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xiaodan Wu, Jianguang Wen, Qing Xiao, Dongqin You, Jingping Wang, Dujuan Ma, Xingwen Lin
2021 J jnl
Remote. Sens.
Dujuan Ma, Xiaodan Wu, Xuanlong Ma, Jingping Wang, Xingwen Lin, Cuicui Mu
2020 J jnl
Artif. Intell. Medicine
Xiaodan Wu, Yumeng Zheng, Chao-Hsien Chu, Zhen He
2020 J jnl
Expert Syst. Appl.
Xiaodan Wu, Yumeng Zheng, Yiming Che, Changqing Cheng
2020 J jnl
J. Simulation
Xiaodan Wu, Juan Li, Mohammad T. Khasawneh
2020 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiaodan Wu, Jianguang Wen, Qing Xiao, Dongqin You
2019 J jnl
J. Oper. Res. Soc.
Xiaodan Wu, Rongrong Xu, Juan Li, Mohammad T. Khasawneh
2019 J jnl
Pattern Recognit. Lett.
Xiaodan Wu, Haibo Li, Xiaohui Xu, Huafeng Wei
2019 conf
ICSH
Xiaodan Wu, Zeyu Sui, Chao-Hsien Chu, Guanjie Huang
2019 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiaodan Wu, Jianguang Wen, Qing Xiao, Dongqin You, Xingwen Lin, Shengbiao Wu, Shouyi Zhong
2019 J jnl
Eur. J. Oper. Res.
Xiaodan Wu, Juan Li, Chao-Hsien Chu
2019 conf
ICSH
Xiaodan Wu, Lingyu Cheng, Chao-Hsien Chu, Jungyoon Kim
2018 conf
ICSH
Guanjie Huang, Chao-Hsien Chu, Xiaodan Wu
2018 J jnl
Remote. Sens.
Lin Xingwen, Jianguang Wen, Qinhuo Liu, Qing Xiao, Dongqin You, Shengbiao Wu, Dalei Hao, Xiaodan Wu
2018 J jnl
Int. J. Digit. Earth
Lin Xingwen, Jianguang Wen, Yong Tang, Mingguo Ma, Dongqin You, Baocheng Dou, Xiaodan Wu, Xiaobo Zhu, Qing Xiao, Qinghuo Liu
2018 J jnl
Remote. Sens.
Xiaodan Wu, Jianguang Wen, Qing Xiao, Dongqin You, Baocheng Dou, Lin Xingwen, Andreas Hueni
2018 J jnl
Int. J. Digit. Earth
Xiaodan Wu, Jianguang Wen, Qing Xiao, Dongqin You, Qiang Liu, Lin Xingwen
2017 J jnl
Int. J. Digit. Earth
Xiaodan Wu, Qing Xiao, Jianguang Wen, Qiang Liu, Dongqin You, Baocheng Dou, Yong Tang
2016 C conf
IGARSS
Xiaodan Wu, Qing Xiao, Jianguang Wen, Mingguo Ma, Dongqin You
2016 C conf
IGARSS
Mingguo Ma, Rui Jin, Yonghua Qu, Xihan Mu, Wenping Yu, Liying Geng, Xufeng Wang, Xiaodan Wu
2016 J jnl
Int. J. Distributed Sens. Networks
Baocheng Dou, Jianguang Wen, Xiuhong Li, Qiang Liu, Jingjing Peng, Qing Xiao, Zhigang Zhang, Yong Tang, Xiaodan Wu, Lin Xingwen, Dongqin You, Hua Li, Li Li, Yelu Zeng, Erli Cai, Jialin Zhang
2015 J jnl
Remote. Sens.
Xiaodan Wu, Qing Xiao, Jianguang Wen, Qiang Liu, Dongqin You, Baocheng Dou, Yong Tang, Xiaowen Li
2010 conf
ICEE
Yongjing Hao, Hua He, Hongjun Cui, Xiaodan Wu
2007 J jnl
Eur. J. Oper. Res.
Xiaodan Wu, Chao-Hsien Chu, Yunfeng Wang, Weili Yan
2007 J jnl
Comput. Ind. Eng.
Xiaodan Wu, Chao-Hsien Chu, Yunfeng Wang, Dianmin Yue
2007 Misc conf
International Conference on Computational Science (3)
Xiaodan Wu, Chao-Hsien Chu, Yunfeng Wang, Fengli Liu, Dianmin Yue
2006 conf
PACIS
Xiaodan Wu, Yunfeng Wang, Chao-Hsien Chu, Fengli Liu, Ping Chen, Dianmin Yue
2006 conf
SEAL
Chang-Chun Tsai, Chao-Hsien Chu, Xiaodan Wu
2005 Misc conf
IC-AI
Xiaodan Wu, Yunfeng Wang, Dianmin Yue, Ming He
2004 Misc conf
IC-AI
Xiaodan Wu, Yunfeng Wang, Dianmin Yue
2004 conf
CMMR
Elaine Chew, Xiaodan Wu
2002 B conf
IEEE Congress on Evolutionary Computation
Xiaodan Wu, Chao-Hsien Chu, Yunfeng Wang, Weli Yan
2001 Misc conf
International Conference on Computational Science (2)
Xiaodan Wu, Ming Fung, Andrew Flitman
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"