Xianggen Liu

45 papers A* 8A 2Journal 31Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Sci.
Zilin Wang, Jiancheng Lv, Xianggen Liu
2026 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Wenhao Zheng, Peidong Liu, Hanwen Zhang, Chenwei Sun, Xiong Deng, Xianggen Liu, Jiancheng Lv
2025 J jnl
IEEE Trans. Ind. Informatics
Cheng Dai, Shoupeng Lu, Peng Wang, Hao Yin, Yijing Wang, Xianggen Liu, Bing Guo
2025 J jnl
Big Data Min. Anal.
Caiyang Yu, Xianggen Liu, Yifan Wang, Yun Liu, Wentao Feng, Xiong Deng, Chenwei Tang, Jiancheng Lv
2025 J jnl
Briefings Bioinform.
Hanwen Zhang, Deng Xiong, Xianggen Liu, Jiancheng Lv
2025 A* conf
ACM Multimedia
Wenhao Zheng, Chenwei Sun, Wenbo Zhang, Jiancheng Lv, Xianggen Liu
2025 J jnl
CoRR
Wenhao Zheng, Chenwei Sun, Wenbo Zhang, Jiancheng Lv, Xianggen Liu
2025 J jnl
Bioinform.
Zhe Xue, Chenwei Sun, Wenhao Zheng, Jiancheng Lv, Xianggen Liu
2024 J jnl
CoRR
Peidong Liu, Wenbo Zhang, Xue Zhe, Jiancheng Lv, Xianggen Liu
2024 conf
NAACL-HLT
Letian Wang, Xianggen Liu, Jiancheng Lv
2024 J jnl
CoRR
Xianggen Liu, Yan Guo, Haoran Li, Jin Liu, Shudong Huang, Bowen Ke, Jiancheng Lv
2024 J jnl
CoRR
Wanlin Cai, Yuxuan Liang, Xianggen Liu, Jianshuai Feng, Yuankai Wu
2024 A* conf
AAAI
Wanlin Cai, Yuxuan Liang, Xianggen Liu, Jianshuai Feng, Yuankai Wu
2024 J jnl
Inf. Sci.
Site Mo, Haoxin Wang, Bixiong Li, Songhai Fan, Yuankai Wu, Xianggen Liu
2023 J jnl
IEEE Trans. Affect. Comput.
Xinke Shen, Xianggen Liu, Xin Hu, Dan Zhang, Sen Song
2023 J jnl
CoRR
Caiyang Yu, Xianggen Liu, Wentao Feng, Chenwei Tang, Jiancheng Lv
2023 J jnl
CoRR
Xiaochen Ma, Bo Du, Xianggen Liu, Ahmed Y. Al Hammadi, Jizhe Zhou
2023 J jnl
CoRR
Site Mo, Haoxin Wang, Bixiong Li, Songhai Fan, Yuankai Wu, Xianggen Liu
2023 conf
EMNLP (Findings)
Haotian Luo, Yixin Liu, Peidong Liu, Xianggen Liu
2023 J jnl
CoRR
Haotian Luo, Yixin Liu, Peidong Liu, Xianggen Liu
2023 J jnl
CoRR
Xianggen Liu, Zhengdong Lu, Lili Mou
2023 ch.
Compendium of Neurosymbolic Artificial Intelligence
Xianggen Liu, Zhengdong Lu, Lili Mou
2022 A* conf
IJCAI
Xianggen Liu, Wenqiang Lei, Jiancheng Lv, Jizhe Zhou
2022 A* conf
NeurIPS
Wenbo Zhang, Likai Tang, Site Mo, Xianggen Liu, Sen Song
2021 J jnl
CoRR
Xinke Shen, Xianggen Liu, Xin Hu, Dan Zhang, Sen Song
2021 J jnl
PLoS Comput. Biol.
Xianggen Liu, Yunan Luo, Pengyong Li, Sen Song, Jian Peng
2021 A* conf
IJCAI
Pengyong Li, Jun Wang, Ziliang Li, Yixuan Qiao, Xianggen Liu, Fei Ma, Peng Gao, Sen Song, Guotong Xie
2021 J jnl
CoRR
Pengyong Li, Jun Wang, Ziliang Li, Yixuan Qiao, Xianggen Liu, Fei Ma, Peng Gao, Seng Song, Guotong Xie
2021 J jnl
Briefings Bioinform.
Hailin Hu, Xianggen Liu, An Xiao, Yangyang Li, Chengdong Zhang, Tao Jiang, Dan Zhao, Sen Song, Jianyang Zeng
2021 J jnl
CoRR
Xianggen Liu, Pengyong Li, Fandong Meng, Hao Zhou, Huasong Zhong, Jie Zhou, Lili Mou, Sen Song
2021 J jnl
Neurocomputing
Xianggen Liu, Pengyong Li, Fandong Meng, Hao Zhou, Huasong Zhong, Jie Zhou, Lili Mou, Sen Song
2021 J jnl
Briefings Bioinform.
Pengyong Li, Yuquan Li, Chang-Yu Hsieh, Shengyu Zhang, Xianggen Liu, Huanxiang Liu, Sen Song, Xiaojun Yao
2020 A* conf
ICML
Xianggen Liu, Qiang Liu, Sen Song, Jian Peng
2020 J jnl
Neurocomputing
Xianggen Liu, Lili Mou, Haotian Cui, Zhengdong Lu, Sen Song
2020 J jnl
CoRR
Xianggen Liu, Yunan Luo, Sen Song, Jian Peng
2020 A* conf
ACL
Xianggen Liu, Lili Mou, Fandong Meng, Hao Zhou, Jie Zhou, Sen Song
2019 A conf
WACV
Yihui He, Xianggen Liu, Huasong Zhong, Yuchun Ma
2019 J jnl
CoRR
Xianggen Liu, Lili Mou, Fandong Meng, Hao Zhou, Jie Zhou, Sen Song
2018 J jnl
CoRR
Haotian Cui, Xianggen Liu, Yanhao Huang
2018 J jnl
CoRR
Xianggen Liu, Lili Mou, Haotian Cui, Zhengdong Lu, Sen Song
2018 A* conf
IJCAI
Xianggen Liu, Lili Mou, Haotian Cui, Zhengdong Lu, Sen Song
2018 conf
ACL (1)
Zhengdong Lu, Xianggen Liu, Haotian Cui, Yukun Yan, Daqi Zheng
2018 J jnl
CoRR
Huasong Zhong, Xianggen Liu, Yihui He, Yuchun Ma
2017 J jnl
CoRR
Zhengdong Lu, Haotian Cui, Xianggen Liu, Yukun Yan, Daqi Zheng
2014 A conf
ECAI
Yulin Zhang, Yang Xu, Haixiao Hu, Xianggen Liu
redb/extractors/decompiler/bninja/similarity/minhasher.py
← Index redb/extractors/decompiler/bninja/similarity/minhasher.py python
import logging
import random
from enum import Enum

from ..analysis.medium_level_normalization import MediumLevelNormalization

try:
    from .minhashcustom import MinHashCustom
    from ..analysis.low_level_normalization import LowLevelNormalization
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.similarity.minhashcustom import MinHashCustom
    from redb.extractors.decompiler.bninja.analysis.low_level_normalization import LowLevelNormalization

## Values for this configuration were extracted from https://github.com/danielplohmann/mcrit/blob/main/mcrit/config/MinHashConfig.py#L10
# Length in number of Shingles of which a minhash consists
# this value represents the length of sha256sum hash truncated
MINHASH_SIGNATURE_LENGTH: int = 64
# Number of bits per signature element (1-32 bits)
MINHASH_SIGNATURE_BITS: int = 8


class TokenKind(Enum):
    LLIL = "llil"
    TYPED_LLIL = "typed_llil"
    MLIL = "mlil"
    TYPED_MLIL = "typed_mlil"


class MinHasher:
    # stick to the default method
    MINHASH_STRATEGY_HASH_ALL = 1

    def __init__(self, seed, il_function, kind: TokenKind = TokenKind.LLIL):
        self._minhash_seeds = []
        self.il_func = il_function
        self.kind = kind
        self._minhash_permutation = []
        self._signature_segments = []
        self._initMinhashing(seed)

    def _initMinhashing(self, MINHASH_SEED=None):
        random.seed(MINHASH_SEED)
        # init sequence of seeds
        self._minhash_seeds = [
            random.randint(0, MinHashCustom.getHashMax()) for _ in range(MINHASH_SIGNATURE_LENGTH)
        ]

    def make_ngrams(self, tokens, n=3):
        """Take the ngrams of the IL we try to pass into the functions"""
        return [tuple(tokens[i:i+n]) for i in range(len(tokens) - n + 1)]

    def _extract_tokens(self):
        """Extract the IL tokens from the IL function, picking the right
        normalizer (LLIL/MLIL) and the right normalization mode
        (skeleton/typed) based on self.kind."""
        if self.kind in (TokenKind.LLIL, TokenKind.TYPED_LLIL):
            normalizer = LowLevelNormalization()
        elif self.kind in (TokenKind.MLIL, TokenKind.TYPED_MLIL):
            normalizer = MediumLevelNormalization()
        else:
            raise ValueError(f"Unsupported token kind: {self.kind}")

        # typed variants include operand type info, skeleton variants don't
        if self.kind in (TokenKind.TYPED_LLIL, TokenKind.TYPED_MLIL):
            normalize = normalizer.normalize_instr_with_operands
        else:
            normalize = normalizer.normalize_instruction_all_levels

        instructions = []
        for basic_block in self.il_func.basic_blocks:
            for il in basic_block:
                instructions.append(normalize(il))

        return instructions

    def calculateMinHash(self):
        """Calculate hash function every time, then take minimum shingle per shingler"""
        minhash_result = MinHashCustom(minhash_bits=MINHASH_SIGNATURE_BITS)
        minhash_signature = []

        tokens = self._extract_tokens()
        shingles = self.make_ngrams(tokens, n=3)

        # Functions with fewer than 3 IL instructions can't produce n-grams
        # Return empty minhash for such small functions (thunks, stubs, etc.)
        # Triggered by 39d8ad95b0323c37bd3134ab93ac4af44c66a1a8443a41c1ac02cec19bb2816a
        if not shingles:
            return []

        # Generate the MinHash
        for seed in self._minhash_seeds:
            hashed_shingles = [
                self.shingle_hash(shingle, seed) for shingle in shingles
            ]
            min_value = min(hashed_shingles)

            if MINHASH_SIGNATURE_BITS < 32:
                min_value %= (2 ** MINHASH_SIGNATURE_BITS)

            minhash_signature.append(min_value)

        minhash_result.setMinHash(minhash_signature)
        return minhash_result.getMinHashInt()

    def shingle_hash(self, shingle, hash_seed=0):
        """Produce a single 32bit UINT hash for a given shingle"""
        return MinHashCustom.hashData(shingle, hash_seed)