Weidong Chen

56 papers B 1C 2Misc 3Journal 15Unranked 35
YearRankTypeTitle / Venue / Authors
2025 J jnl
Biomed. Signal Process. Control.
Tengjun Liu, Yansong Chua, Yuxiao Ning, Pengfu Liu, Yiwei Zhang, Tuoru Li, Guihua Wan, Zijun Wan, Weidong Chen, Shaomin Zhang
2024 Misc conf
ICASSP
Zijun Wan, Yunying Wu, Mohamed Baha Ben Ticha, Gaël Le Godais, Philippe Kahane, Stéphan Chabardès, Weidong Chen, Shaomin Zhang, Blaise Yvert
2023 J jnl
CoRR
Tengjun Liu, Yansong Chua, Yiwei Zhang, Yuxiao Ning, Pengfu Liu, Guihua Wan, Zijun Wan, Shaomin Zhang, Weidong Chen
2023 J jnl
Frontiers Comput. Neurosci.
Zijun Wan, Tengjun Liu, Xingchen Ran, Pengfu Liu, Weidong Chen, Shaomin Zhang
2022 J jnl
Comput. Biol. Medicine
Xingchen Ran, Weidong Chen, Blaise Yvert, Shaomin Zhang
2022 conf
ICBIP
Zijun Wan, Dongrong Lai, Feixiao Ren, Weidong Chen, Kedi Xu
2021 conf
EMBC
Yiwei Zhang, Zijun Wan, Guihua Wan, Qi Zheng, Weidong Chen, Shaomin Zhang
2021 conf
EMBC
Xingchen Ran, Yiwei Zhang, Chenye Shen, Blaise Yvert, Weidong Chen, Shaomin Zhang
2021 conf
NER
Chenyang Li, Haonan Guan, Zenan Huang, Weidong Chen, Jianhua Li, Shaomin Zhang
2021 conf
EMBC
Changhao Liu, Mingkang Li, Ruixue Wang, Xin Cui, Hayoung Jung, Kim Halin, Heecheon You, Xiaopeng Yang, Weidong Chen
2020 conf
EMBC
Haonan Guan, Yanyu Zheng, Minmin Wang, Yi Zhang, Min Wang, Weidong Chen, Shaomin Zhang
2020 conf
EMBC
Qi Zheng, Yiwei Zhang, Zijun Wan, Wasim Q. Malik, Weidong Chen, Shaomin Zhang
2019 conf
BioCAS
Zijun Wan, Xingchen Ran, Weidong Chen, Shaomin Zhang
2019 conf
BioCAS
Yizuo Ren, Xingchen Ran, Weidong Chen, Shaomin Zhang
2019 conf
NER
Xingchen Ran, Shaomin Zhang, Guanghao Sun, Junming Zhu, Weidong Chen, Gang Pan
2016 conf
UIC/ATC/ScalCom/CBDCom/IoP/SmartWorld
Weidong Chen, Xuefei Wang, Nenggan Zheng, Yanfei Liu, Sen Yu
2015 J jnl
IEEE Trans. Auton. Ment. Dev.
Yiwen Wang, Lei Jiang, Yun Wang, Bangyu Cai, Yueming Wang, Weidong Chen, Sanyuan Zhang, Xiaoxiang Zheng
2015 conf
NER
Lei Jiang, Yun Wang, Bangyu Cai, Yiwen Wang, Weidong Chen, Xiaoxiang Zheng
2013 conf
EMBC
Ting-Ting Ge, Yu Qi, Yueming Wang, Weidong Chen, Xiaoxiang Zheng
2013 conf
EMBC
Chen Zhang, Chao Sun, Liqiang Gao, Nenggan Zheng, Weidong Chen, Xiaoxiang Zheng
2013 J jnl
IEEE Robotics Autom. Mag.
Yaoyao Hao, Marco Controzzi, Christian Cipriani, Dejan B. Popovic, Xin Yang, Weidong Chen, Xiaoxiang Zheng, Maria Chiara Carrozza
2013 conf
EMBC
Siyuan Xiao, Bangyu Cai, Lei Jiang, Yiwen Wang, Weidong Chen, Xiaoxiang Zheng
2013 J jnl
Comput. Math. Methods Medicine
Yan Cao, Yaoyao Hao, Yuxi Liao, Kai Xu, Yiwen Wang, Shaomin Zhang, Qiaosheng Zhang, Weidong Chen, Xiaoxiang Zheng
2013 conf
EMBC
Liqiang Gao, Chao Sun, Chen Zhang, Nenggan Zheng, Weidong Chen, Xiaoxiang Zheng
2013 conf
EMBC
Lei Jiang, Bangyu Cai, Siyuan Xiao, Yiwen Wang, Weidong Chen, Xiaoxiang Zheng
2012 J jnl
Comput. Biol. Medicine
Bian Wu, Fan Yang, Ji-cai Zhang, Yiwen Wang, Xiaoxiang Zheng, Weidong Chen
2012 conf
APCHI
Zhong Yang, Yi Li, Yang Zheng, Weidong Chen, Xiaoxiang Zheng
2012 conf
EMBC
Chao Sun, Xinlu Zhang, Nenggan Zheng, Weidong Chen, Xiaoxiang Zheng
2012 conf
EMBC
Yue Li, Yaoyao Hao, Dong Wang, Qiaosheng Zhang, Yuxi Liao, Xiaoxiang Zheng, Weidong Chen
2012 conf
EMBC
Dong Wang, Yaoyao Hao, Qiaosheng Zhang, Shaomin Zhang, Ting Zhao, Xiaoxiang Zheng, Weidong Chen
2012 conf
EMBC
Xinlu Zhang, Chao Sun, Nenggan Zheng, Weidong Chen, Xiaoxiang Zheng
2011 J jnl
J. Zhejiang Univ. Sci. C
Yu Su, Yu Qi, Jian-xun Luo, Bian Wu, Fan Yang, Yi Li, Yueting Zhuang, Xiaoxiang Zheng, Weidong Chen
2011 J jnl
Int. J. Imaging Syst. Technol.
Shaomin Zhang, Bo Jiang, Junming Zhu, Qiaosheng Zhang, Weidong Chen, Xiaoxiang Zheng, Ting Zhao
2011 conf
EMBC
Chao Sun, Nenggan Zheng, Xinlu Zhang, Weidong Chen, Xiaoxiang Zheng
2011 conf
EMBC
Ji-cai Zhang, Weidong Chen, Yanlei Gu, Bian Wu, Yu Qi, Xiaoxiang Zheng
2011 conf
EMBC
Kai Xu, Yueming Wang, Shaomin Zhang, Ting Zhao, Yiwen Wang, Weidong Chen, Xiaoxiang Zheng
2011 J jnl
Int. J. Imaging Syst. Technol.
Shaomin Zhang, Yuxi Liao, Xiaoxiang Zheng, Weidong Chen, Yiwen Wang
2011 conf
EMBC
Dong Wang, Yaoyao Hao, Xiaoping Zhu, Ting Zhao, Yiwen Wang, Yaowu Chen, Weidong Chen, Xiaoxiang Zheng
2010 J jnl
J. Convergence Inf. Technol.
Jianhua Dai, Huaijian Zhang, Xiaochun Liu, Shaomin Zhang, Weidong Chen, Xiaoxiang Zheng
2010 J jnl
J. Zhejiang Univ. Sci. C
Weidong Chen, Jianhui Zhang, Ji-cai Zhang, Yi Li, Yu Qi, Yu Su, Bian Wu, Shaomin Zhang, Jianhua Dai, Xiaoxiang Zheng
2010 conf
GreenCom/CPSCom
Yanming Zhang, Chao Sun, Nenggan Zheng, Shaomin Zhang, Jiyan Lin, Weidong Chen, Xiaoxiang Zheng
2010 J jnl
J. Digit. Content Technol. its Appl.
Jianhua Dai, Xiaochun Liu, Shaomin Zhang, Huaijian Zhang, Qing Xu, Weidong Chen, Xiaoxiang Zheng
2010 J jnl
J. Digit. Content Technol. its Appl.
Jianhua Dai, Xiaochun Liu, Qing Xu, Nenggan Zheng, Shaomin Zhang, Weidong Chen, Xiaoxiang Zheng
2010 conf
CACSD
Xiaoxiang Zheng, Jia Jia, Yaoyao Hao, Shaomin Zhang, Weidong Chen, Jianhua Dai
2008 Misc conf
GrC
Jianhua Dai, Xiaochun Liu, Shaomin Zhang, Huaijian Zhang, Yu Yi, Qingbo Wang, Yu Su, Weidong Chen, Xiaoxiang Zheng
2008 C conf
CW
Yi Li, Weidong Chen, Dongming Lu
2006 conf
ISCIS
Yi Li, Weidong Chen, Dongming Lu, Lei Zhao
2006 conf
IMSCCS (2)
Jianhua Dai, Weidong Chen, Hongying Gu, Yunhe Pan
2006 conf
RSKT
Jianhua Dai, Weidong Chen, Yunhe Pan
2006 conf
RSCTC
Jianhua Dai, Hanfei Lv, Weidong Chen, Yunhe Pan
2005 conf
ICCSA (1)
Qingshu Yuan, Dongming Lu, Weidong Chen, Yunhe Pan
2005 Misc conf
GrC
Jianhua Dai, Weidong Chen, Yunhe Pan
2004 C conf
APWeb
Yong Liu, Congfu Xu, Zhaohui Wu, Weidong Chen, Yunhe Pan
2004 conf
SMC (6)
Jinlong Wang, Congfu Xu, Weidong Chen, Yunhe Pan
2003 B conf
SMC
Yong Liu, Congfu Xu, Weidong Chen, Yunhe Pan
2003 conf
GCC (2)
Yong Liu, Congfu Xu, Zhaohui Wu, Weidong Chen, Yunhe Pan
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"