Kan Zhong

52 papers A* 3A 2B 3C 6Misc 2Journal 23Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Robotics Autom. Lett.
Yuexin Mu, Ao Ren, Duo Liu, Murong Wang, Zihao Zhang, Haojie Lu, Yujuan Tan, Kan Zhong
2026 J jnl
Future Gener. Comput. Syst.
Linbo Long, Xinrui Dong, Ting Wu, Jingcheng Shen, Kan Zhong
2026 J jnl
Sci. China Inf. Sci.
Wei Li, Xianzhang Chen, Xingjie Zhou, Duo Liu, Yujuan Tan, Ao Ren, Kan Zhong, Lei Qiao
2026 J jnl
IEEE Trans. Computers
Chaoxia Qin, Duo Liu, Bing Guo, Yujuan Tan, Ao Ren, Kan Zhong, Liang Liang
2025 C conf
ICCD
Qingqiu Lan, Ao Ren, Zhenyu Wang, Wei Li, Hongbin Zhu, Yujuan Tan, Duo Liu, Kan Zhong, Chaoxia Qin
2025 conf
ICIC (21)
Yan Gan, Yujuan Tan, Jiayi Guo, Yujiao Wang, Zongjie Wang, Duo Liu, Ao Ren, Kan Zhong, Chaoxia Qin, Mingrui Qiang
2025 conf
Euro-Par (1)
Wei Li, Ao Ren, Qingqiu Lan, Haining Fang, Zhenyu Wang, Yujuan Tan, Kan Zhong, Duo Liu
2025 conf
Euro-Par (2)
Zhaoyang Zeng, Yujuan Tan, Jiali Li, Zhuoxin Bai, Jun Liu, Kan Zhong, Duo Liu, Ao Ren
2025 C conf
ICCD
Yujuan Tan, Jiayi Guo, Zhuoxin Bai, Sanle Zhao, Yujiao Wang, Zongjie Wang, Ao Ren, Kan Zhong, Lin Huang, Jun Liu
2025 B conf
ICPADS
Qingqiu Lan, Ao Ren, Zhenyu Wang, Wei Li, Hongbin Zhu, Yujuan Tan, Duo Liu, Kan Zhong, Chaoxia Qin
2025 J jnl
J. Syst. Archit.
Yujuan Tan, Yan Gan, Zhaoyang Zeng, Zhuoxin Bai, Lei Qiao, Duo Liu, Kan Zhong, Ao Ren
2025 A* conf
DAC
Yuexin Mu, Ao Ren, Duo Liu, Zihao Zhang, Haojie Lu, Longyi Zhou, Huachen Tan, Kan Zhong, Yujuan Tan, Chaoxia Qin
2025 Misc conf
ICASSP
Binyan Zhang, Ao Ren, Zihao Zhang, Moming Duan, Duo Liu, Yujuan Tan, Kan Zhong
2025 J jnl
ACM Trans. Archit. Code Optim.
Jingcheng Shen, Lang Yang, Linbo Long, Zhenhua Tan, Congming Gao, Kan Zhong, Masao Okita, Fumihiko Ino
2025 J jnl
Future Gener. Comput. Syst.
Kan Zhong, Qiao Li, Ao Ren, Yujuan Tan, Xianzhang Chen, Linbo Long, Duo Liu
2025 C conf
CLUSTER
Canghai Yang, Kan Zhong, Yujuan Tan, Ao Ren, Duo Liu
2025 conf
ICIC (5)
Mingrui Qiang, Ao Ren, Yujuan Tan, Jing Yu, Zhuoxin Bai, Duo Liu, Kan Zhong, Chaoxia Qin
2024 J jnl
J. Syst. Archit.
Yujuan Tan, Zhuoxin Bai, Duo Liu, Zhaoyang Zeng, Yan Gan, Ao Ren, Xianzhang Chen, Kan Zhong
2024 B conf
ICPP
Kan Zhong, Zhiwang Yu, Qiao Li, Xianqiang Luo, Linbo Long, Yujuan Tan, Ao Ren, Duo Liu
2024 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Miao Tang, Ning Liu, Tao Yang, Haining Fang, Qiu Lin, Yujuan Tan, Xianzhang Chen, Duo Liu, Kan Zhong, Ao Ren
2024 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Jiali Li, Zhaoyan Shen, Duo Liu, Xianzhang Chen, Kan Zhong, Zhaoyang Zeng, Yujuan Tan
2024 J jnl
ACM Trans. Archit. Code Optim.
Zhenhua Tan, Linbo Long, Jingcheng Shen, Renping Liu, Congming Gao, Kan Zhong, Yi Jiang
2024 conf
NVMSA
Junlong Zhu, Zheng Wan, Hongyang Dang, Kan Zhong, Min Ye, Qiao Li, Chun Jason Xue
2024 C conf
ACML
Huachen Tan, Moming Duan, Duo Liu, Haojie Lu, Yuexin Mu, Longyi Zhou, Ao Ren, Yujuan Tan, Kan Zhong
2024 J jnl
ACM Trans. Archit. Code Optim.
Linbo Long, Shuiyong He, Jingcheng Shen, Renping Liu, Zhenhua Tan, Congming Gao, Duo Liu, Kan Zhong, Yi Jiang
2023 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kan Zhong, Wenlin Cui, Xin Chen, Qiao Li, Zhe Yang, Youyou Lu, Xiaodan Yan, Siwei Luo, Qizhao Yuan, Keji Huang
2021 conf
ICCT
Feng Xie, Yang Luo, Li Wang, Hu Yue, Kan Zhong, Rongheng Lin
2021 J jnl
CoRR
Kan Zhong, Wenlin Cui, Youyou Lu, Quanzhang Liu, Xiaodan Yan, Qizhao Yuan, Siwei Luo, Keji Huang
2020 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Duo Liu, Xingni Li, Po-Chun Huang, Yi Gu, Yingjian Ling, Kan Zhong, Renping Liu, Xianzhang Chen, Liang Liang
2019 J jnl
IEEE Trans. Parallel Distributed Syst.
Kan Zhong, Duo Liu, Yunsong Wu, Linbo Long, Weichen Liu, Jinting Ren, Renping Liu, Liang Liang, Zili Shao, Tao Li
2018 A* conf
HPCA
Mingcong Song, Kan Zhong, Jiaqi Zhang, Yang Hu, Duo Liu, Weigong Zhang, Jing Wang, Tao Li
2018 conf
ISVLSI
Yingjian Ling, Kan Zhong, Yunsong Wu, Duo Liu, Jinting Ren, Renping Liu, Moming Duan, Weichen Liu, Liang Liang
2018 C conf
ICCD
Huixiang Chen, Yuting Dai, Rui Xue, Kan Zhong, Tao Li
2017 J jnl
IEEE Trans. Parallel Distributed Syst.
Kan Zhong, Duo Liu, Lingbo Long, Jinting Ren, Yang Li, Edwin Hsing-Mean Sha
2017 J jnl
IEEE Trans. Parallel Distributed Syst.
Duo Liu, Kan Zhong, Tianzheng Wang, Yi Wang, Zili Shao, Edwin Hsing-Mean Sha, Jingling Xue
2017 J jnl
IEEE Trans. Computers
Duo Liu, Kan Zhong, Xiao Zhu, Yang Li, Lingbo Long, Zili Shao
2017 J jnl
Future Gener. Comput. Syst.
Xiao Zhu, Duo Liu, Liang Liang, Kan Zhong, Linbo Long, Meikang Qiu, Zili Shao, Edwin Hsing-Mean Sha
2017 A* conf
DAC
Xiao Zhu, Duo Liu, Kan Zhong, Jinting Ren, Tao Li
2017 C conf
IECON
Erjie Qi, Mingxuan Qi, Dingjun Zeng, Haoran Wang, Guorong Zhu, Jing Zhang, Kan Zhong
2016 J jnl
J. Syst. Archit.
Linbo Long, Edwin Hsing-Mean Sha, Duo Liu, Liang Liang, Kan Zhong, Xiao Zhu
2016 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kan Zhong, Duo Liu, Liang Liang, Xiao Zhu, Linbo Long, Yi Wang, Edwin Hsing-Mean Sha
2016 A conf
DATE
Kan Zhong, Duo Liu, Liang Liang, Linbo Long, Yi Lin, Zili Shao
2016 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Linbo Long, Duo Liu, Liang Liang, Xiao Zhu, Kan Zhong, Zili Shao, Edwin Hsing-Mean Sha
2015 conf
ASP-DAC
Linbo Long, Duo Liu, Xiao Zhu, Kan Zhong, Zili Shao, Edwin Hsing-Mean Sha
2015 conf
NVMSA
Linbo Long, Duo Liu, Liang Liang, Kan Zhong, Xiao Zhu, Edwin Hsing-Mean Sha
2015 conf
NVMSA
Xianlu Luo, Duo Liu, Liang Liang, Yang Li, Kan Zhong, Linbo Long
2015 conf
HPCC/CSS/ICESS
Dan Zhang, Duo Liu, Liang Liang, Lei Yao, Kan Zhong, Zili Shao
2015 conf
HPCC/CSS/ICESS
Xiao Zhu, Duo Liu, Liang Liang, Kan Zhong, Meikang Qiu, Edwin Hsing-Mean Sha
2015 conf
HPCC/CSS/ICESS
Lei Yao, Duo Liu, Kan Zhong, Linbo Long, Zili Shao
2014 Misc conf
EMSOFT
Kan Zhong, Tianzheng Wang, Xiao Zhu, Linbo Long, Duo Liu, Weichen Liu, Zili Shao, Edwin Hsing-Mean Sha
2014 A conf
ISLPED
Kan Zhong, Xiao Zhu, Tianzheng Wang, Dan Zhang, Xianlu Luo, Duo Liu, Weichen Liu, Edwin Hsing-Mean Sha
2014 B conf
RTCSA
Xianlu Luo, Duo Liu, Kan Zhong, Dan Zhang, Yi Lin, Jie Dai, Weichen Liu
redb/extractors/elf_extractors/elf_imports.py
← Index redb/extractors/elf_extractors/elf_imports.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Set

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 ELFImport


class ELFImportExtractor(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_imports = None
        self.elastic_index = self.index_prefix + "-elf_imports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_import_libraries(self, elf) -> List[str]:
        """Extract imported libraries from dynamic section."""
        libraries = []

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return libraries

            # Extract DT_NEEDED entries (required libraries)
            for tag in dynamic_section.iter_tags():
                if tag.entry.d_tag == 'DT_NEEDED':
                    libraries.append(tag.needed)

        except Exception as e:
            self.log.error(f"Error extracting import libraries: {e}")

        return libraries

    def _get_imported_functions_from_symbols(self, elf) -> Set[str]:
        """Extract imported functions from dynamic symbol table."""
        imported_functions = set()

        try:
            # Get the dynamic symbol table
            dynsym_section = elf.get_section_by_name('.dynsym')
            if not dynsym_section or not hasattr(dynsym_section, 'iter_symbols'):
                return imported_functions

            # Look for undefined symbols (imports)
            for symbol in dynsym_section.iter_symbols():
                # Check if symbol is undefined (imported)
                if (symbol.entry.get('st_shndx', 0) == 'SHN_UNDEF' and
                    symbol.name and
                    symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK']):
                    imported_functions.add(symbol.name)

        except Exception as e:
            self.log.error(f"Error extracting imported functions from symbols: {e}")

        return imported_functions

    def _get_imported_functions_from_relocations(self, elf) -> Set[str]:
        """Extract imported functions from relocation sections."""
        imported_functions = set()

        try:
            # Look through relocation sections
            for section in elf.iter_sections():
                if hasattr(section, 'iter_relocations'):
                    try:
                        for relocation in section.iter_relocations():
                            # Get symbol associated with relocation
                            if hasattr(relocation, 'symbol') and relocation.symbol:
                                symbol_name = relocation.symbol.name
                                if symbol_name:
                                    imported_functions.add(symbol_name)
                    except Exception as e:
                        self.log.debug(f"Could not process relocations in section {section.name}: {e}")

        except Exception as e:
            self.log.error(f"Error extracting imported functions from relocations: {e}")

        return imported_functions

    def _get_plt_functions(self, elf) -> Set[str]:
        """Extract functions from PLT (Procedure Linkage Table) sections."""
        plt_functions = set()

        try:
            # Look for PLT-related sections
            plt_sections = ['.plt', '.plt.got', '.plt.sec']

            for section_name in plt_sections:
                section = elf.get_section_by_name(section_name)
                if section:
                    # PLT functions are typically associated with relocations
                    # We'll get them from the relocation analysis
                    pass

        except Exception as e:
            self.log.error(f"Error extracting PLT functions: {e}")

        return plt_functions

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

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

            def extract_data(elf):
                # Extract import libraries
                import_libraries = self._get_import_libraries(elf)

                # Extract imported functions from multiple sources
                imported_functions = set()

                # From dynamic symbols
                symbol_imports = self._get_imported_functions_from_symbols(elf)
                imported_functions.update(symbol_imports)

                # From relocations
                relocation_imports = self._get_imported_functions_from_relocations(elf)
                imported_functions.update(relocation_imports)

                # From PLT
                plt_imports = self._get_plt_functions(elf)
                imported_functions.update(plt_imports)

                # Convert to sorted lists for consistent output
                import_libraries_list = sorted(list(set(import_libraries)))
                import_functions_list = sorted(list(imported_functions))

                # Return ELFImport dataclass
                return ELFImport(
                    elf_imports_total=len(import_functions_list),
                    elf_import_libraries=import_libraries_list,
                    elf_import_functions=import_functions_list,
                )

            if not self._is_elf_file():
                return None

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

            self.elf_imports = result
            return self.elf_imports

        except Exception as e:
            self.log.error(f"Error extracting ELF imports {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_imports
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_imports:
                    return None

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.elf_imports.elf_imports_total,
                    self.elf_imports.elf_import_libraries,
                    self.elf_imports.elf_import_functions,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'elf_imports_total',
                    'elf_import_libraries',
                    'elf_import_functions',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt32',
                    'Array(LowCardinality(String))',
                    'Array(LowCardinality(String))',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                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_imports"