Wei Guo

68 papers A 5C 1Journal 31Unranked 31
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Yaofeng Cheng, Fusheng Zha, Wei Guo, Pengfei Wang, Chao Zeng, Lining Sun, Chenguang Yang
2025 J jnl
IEEE Robotics Autom. Lett.
Jixin Gao, Fusheng Zha, Lianzhao Zhang, Wei Guo, Pengfei Wang, Lining Sun, Mantian Li
2025 J jnl
Frontiers Neurorobotics
Sen Zhang, Fusheng Zha, Xiangji Wang, Mantian Li, Wei Guo, Pengfei Wang, Xiaolin Li, Lining Sun
2025 J jnl
CoRR
Yaofeng Cheng, Fusheng Zha, Wei Guo, Pengfei Wang, Chao Zeng, Lining Sun, Chenguang Yang
2025 J jnl
J. Intell. Robotic Syst.
Xiangji Wang, Wei Guo, Teng Zhang, Weicong Zheng, Zhicheng He, Fusheng Zha, Pengfei Wang, Lining Sun
2025 J jnl
Frontiers Neurorobotics
Xiangji Wang, Wei Guo, Siyu Yin, Sen Zhang, Fusheng Zha, Mantian Li, Pengfei Wang, Xiaolin Li, Lining Sun
2024 J jnl
IEEE Robotics Autom. Lett.
Yaofeng Cheng, Shengkai Liu, Fusheng Zha, Wei Guo, Haoyu Du, Pengfei Wang, Zhenshan Bing
2024 J jnl
Robotica
Lianzhao Zhang, Fusheng Zha, Wei Guo, Chen Chen, Lining Sun, Pengfei Wang
2024 J jnl
Frontiers Neurorobotics
Yajing Zang, Pengfei Wang, Fusheng Zha, Wei Guo, Chuanfeng Li, Lining Sun
2024 J jnl
Int. J. Humanoid Robotics
Shuaijun Wang, Lining Sun, Mantian Li, Pengfei Wang, Fusheng Zha, Wei Guo, Qiang Li
2024 J jnl
CoRR
Shengkai Liu, Yaofeng Cheng, Fusheng Zha, Wei Guo, Lining Sun, Zhenshan Bing, Chenguang Yang
2024 J jnl
Frontiers Neurorobotics
Keyao Liang, Fusheng Zha, Wei Guo, Shengkai Liu, Pengfei Wang, Lining Sun
2023 J jnl
IEEE Robotics Autom. Lett.
Yajing Zang, Pengfei Wang, Fusheng Zha, Wei Guo, Songlin Ruan, Lining Sun
2023 J jnl
Frontiers Neurorobotics
Shuaijun Wang, Lining Sun, Fusheng Zha, Wei Guo, Pengfei Wang
2023 conf
ICIRA (4)
Kailong Li, Fusheng Zha, Pengfei Wang, Wei Guo, Yajing Zang, Lining Sun
2023 J jnl
Frontiers Neurorobotics
Yajing Zang, Pengfei Wang, Fusheng Zha, Wei Guo, Chao Zheng, Lining Sun
2023 conf
RCAR
Teng Zhang, Pengfei Wang, Fusheng Zha, Wei Guo, Mantian Li
2023 conf
ICIRA (4)
Keyao Liang, Fusheng Zha, Wentao Sheng, Wei Guo, Pengfei Wang, Lining Sun
2022 J jnl
IEEE Access
Jinsheng Yuan, Wei Guo, Fusheng Zha, Mantian Li, Lining Sun
2021 J jnl
Frontiers Neurorobotics
Jinsheng Yuan, Wei Guo, Fusheng Zha, Pengfei Wang, Mantian Li, Lining Sun
2021 conf
RCAR
Haodong Wang, Wei Guo, Yu Fu
2021 J jnl
Frontiers Neurorobotics
Yizhou Liu, Fusheng Zha, Mantian Li, Wei Guo, Yunxin Jia, Pengfei Wang, Yajing Zang, Lining Sun
2021 J jnl
Frontiers Neurorobotics
Shiyin Qiu, Wei Guo, Fusheng Zha, Jing Deng, Xin Wang
2021 J jnl
IEEE Trans. Cogn. Dev. Syst.
Shiyin Qiu, Wei Guo, Darwin G. Caldwell, Fei Chen
2021 J jnl
Ind. Robot
Zeguo Yang, Mantian Li, Fusheng Zha, Xin Wang, Pengfei Wang, Wei Guo
2021 J jnl
Auton. Robots
Chen Chen, Fusheng Zha, Wei Guo, Zhibin Li, Lining Sun, Junyi Shi
2020 J jnl
IEEE Access
Jikai Liu, Pengfei Wang, Mantian Li, Wei Guo, Fusheng Zha, Lining Sun, Penglong Zheng
2020 J jnl
Sensors
Jikai Liu, Pengfei Wang, Fusheng Zha, Wei Guo, Zhenyu Jiang, Lining Sun
2020 J jnl
Sensors
Chen Chen, Wei Guo, Pengfei Wang, Lining Sun, Fusheng Zha, Junyi Shi, Mantian Li
2020 conf
ICARM
Shiyin Qiu, Wei Guo, Fusheng Zha, Xin Wang, Wentao Sheng, Fei Chen, Darwin G. Caldwell
2020 conf
CACRE
Junyi Shi, Fusheng Zha, Wei Guo, Pengfei Wang, Mantian Li
2020 conf
ICARM
Yizhou Liu, Fusheng Zha, Mantian Li, Wei Guo, Xin Wang, Wangqiang Jia, Darwin G. Caldwell
2020 A conf
IROS
Mantian Li, Zeguo Yang, Fusheng Zha, Xin Wang, Pengfei Wang, Wei Guo, Darwin G. Caldwell, Fei Chen
2020 J jnl
Sensors
Yu Fu, Mantian Li, Xinyi Zhang, Sen Zhang, Chunyu Wei, Wei Guo, Hegao Cai, Lining Sun, Pengfei Wang, Fusheng Zha
2020 conf
ICARM
Ming Liu, Mantian Li, Fusheng Zha, Fangwei Zou, Pengfei Wang, Wei Guo, Haowei Wang
2019 A conf
IROS
Shiyin Qiu, Wei Guo, Pengfei Wang, Fei Chen, Fusheng Zha, Xin Wang, Jing Deng
2019 J jnl
IEEE Trans. Cogn. Dev. Syst.
Yapeng Shi, Pengfei Wang, Xin Wang, Fusheng Zha, Zhenyu Jiang, Wei Guo, Mantian Li
2019 conf
ICARM
Chen Chen, Wei Guo, Penglong Zheng, Fusheng Zha, Xin Wang, Zhenyu Jiang
2019 conf
ICARM
Wentao Sheng, Wei Guo, Fusheng Zha, Zhenyu Jiang, Xin Wang, Huaidong Zhang
2019 conf
ICARM
Shiyin Qiu, Wei Guo, Fusheng Zha, Jing Deng, Xin Wang, Feng Xu
2018 conf
ICARM
Wei Guo, Feng Zhu, Fusheng Zha, Xin Wang, Fei Chen
2018 conf
ISR
Wei Guo, Chao Wang, Yu Fu, Fusheng Zha
2018 conf
ISR
Wei Guo, Wentao Sheng, Guangjun Liu, Fusheng Zha
2018 J jnl
Complex.
Fusheng Zha, Yizhou Liu, Xin Wang, Fei Chen, Jingxuan Li, Wei Guo
2017 conf
ICARM
Xiwen Meng, Wei Guo, Xin Wang, Mantian Li, Fusheng Zha, Pengfei Wang
2017 conf
ICIA
Wei Guo, Shiyin Qiu, Pengfei Wang, Wentao Sheng, Jing Deng
2017 conf
ICARM
Mantian Li, Kun Li, Pengfei Wang, Yizhou Liu, Fusheng Zha, Wei Guo
2017 conf
ICARM
Mantian Li, Ming Liu, Fusheng Zha, Wei Guo, Mingbi Lu, Xin Wang
2017 conf
ICARM
Fusheng Zha, Kenan Wang, Wei Guo, Zhenshan Bing, Changrong Cai, Baoxiang Wang, Zhenyu Jiang
2017 conf
ICARM
Pengfei Wang, Chao Gao, Wei Guo, Mantian Li, Fusheng Zha, Yanjie Cong
2017 conf
ICARM
Wei Guo, Yuanyuan Han, Fusheng Zha, Kenan Wang, Ming Yan, Zhenyu Jiang
2017 conf
ICARM
Fusheng Zha, Tianhao Wang, Wei Guo, Pengfei Wang, Yizhou Liu, Changyan Chen
2016 conf
ICARM
Mantian Li, Mingming Zhang, Yu Fu, Wei Guo, Xingneng Zhong, Xin Wang, Fei Chen
2016 conf
ICARM
Ming Liu, Xingneng Zhong, Xin Wang, Fei Chen, Fusheng Zha, Wei Guo
2014 conf
ChinaSIP
You Zhou, Wa Gao, Fusheng Zha, Baoyu Song, Mantian Li, Pengfei Wang, Wei Guo
2013 A conf
IROS
Haitao Yu, Wei Guo, Jing Deng, Mantian Li, Hegao Cai
2013 conf
ROBIO
Xingdong Li, Wei Guo, Mantian Li, Lining Sun
2013 conf
ROBIO
Guocai Liu, Fusheng Zha, Mantian Li, Wei Guo, Pengfei Wang, Hegao Cai
2013 conf
ROBIO
Peng Yin, Mantian Li, Wei Guo, Pengfei Wang, Lining Sun
2013 A conf
IROS
Xin Wang, Mantian Li, Wei Guo, Pengfei Wang, Lining Sun
2013 conf
ICIA
Xingdong Li, Wei Guo, Mantian Li, Chao Chen, Lining Sun
2013 J jnl
Neurocomputing
Fusheng Zha, Mantian Li, Pengfei Wang, Jiaxuan Chen, Yili Fu, Wei Guo
2013 J jnl
Neurocomputing
Fusheng Zha, Mantian Li, Wei Guo, Jiaxuan Chen, Pengfei Wang
2012 A conf
IROS
Xin Wang, Mantian Li, Wei Guo, Pengfei Wang, Lining Sun
2012 J jnl
Neurocomputing
Fusheng Zha, Jiaxuan Chen, Mantian Li, Wei Guo, Pengfei Wang
2011 conf
RAM
Zhenyu Jiang, Mantian Li, Wei Guo
2007 conf
ROBIO
Wei Guo, Tingting Wang, Fusheng Zha, Mantian Li
2006 C conf
ICARCV
Weida Li, Wei Guo, Mantian Li, Yuhong Zhu
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"