Hancheng Cao

59 papers A* 11A 2Journal 45Unranked 1
YearRankTypeTitle / Venue / Authors
2026 A* conf
CHI
Qing Xiao, Qing Hu, Jingjia Xiao, Hancheng Cao, Hong Shen
2026 J jnl
CoRR
Aneesh Pappu, Batu El, Hancheng Cao, Carmelo di Nolfo, Yanchao Sun, Meng Cao, James Zou
2026 A* conf
CHI
Qing Hu, Qing Xiao, Hancheng Cao, Hong Shen
2025 J jnl
CoRR
Qing Xiao, Xinlan Emily Hu, Mark E. Whiting, Arvind Karunakaran, Hong Shen, Hancheng Cao
2025 J jnl
CoRR
Qing Xiao, Qing Hu, Jingjia Xiao, Hancheng Cao, Hong Shen
2025 J jnl
CoRR
Yaohui Zhang, Haijing Zhang, Wenlong Ji, Tianyu Hua, Nick Haber, Hancheng Cao, Weixin Liang
2025 A* conf
EMNLP
Sheshera Mysore, Debarati Das, Hancheng Cao, Bahareh Sarrafzadeh
2025 J jnl
CoRR
Sheshera Mysore, Debarati Das, Hancheng Cao, Bahareh Sarrafzadeh
2025 J jnl
CoRR
Weixin Liang, Yaohui Zhang, Mihai Codreanu, Jiayu Wang, Hancheng Cao, James Zou
2025 J jnl
Patterns
Weixin Liang, Yaohui Zhang, Mihai Codreanu, Jiayu Wang, Hancheng Cao, James Zou
2025 J jnl
CoRR
Jie Li, Youyang Hou, Laura Lin, Ruihao Zhu, Hancheng Cao, Abdallah El Ali
2025 J jnl
CoRR
Qing Hu, Qing Xiao, Hancheng Cao, Hong Shen
2024 J jnl
CoRR
Weixin Liang, Yaohui Zhang, Zhengxuan Wu, Haley Lepp, Wenlong Ji, Xuandong Zhao, Hancheng Cao, Sheng Liu, Siyu He, Zhi Huang, Diyi Yang, Christopher Potts, Christopher D. Manning, James Y. Zou
2024 A* conf
ICML
Weixin Liang, Zachary Izzo, Yaohui Zhang, Haley Lepp, Hancheng Cao, Xuandong Zhao, Lingjiao Chen, Haotian Ye, Sheng Liu, Zhi Huang, Daniel A. McFarland, James Y. Zou
2024 J jnl
CoRR
Weixin Liang, Zachary Izzo, Yaohui Zhang, Haley Lepp, Hancheng Cao, Xuandong Zhao, Lingjiao Chen, Haotian Ye, Sheng Liu, Zhi Huang, Daniel A. McFarland, James Y. Zou
2024 A* conf
CHI
Jie Li, Hancheng Cao, Laura Lin, Youyang Hou, Ruihao Zhu, Abdallah El Ali
2023 A* conf
CHI
Hancheng Cao, Yujie Lu, Yuting Deng, Daniel A. McFarland, Michael S. Bernstein
2023 J jnl
CoRR
Hancheng Cao, Yujie Lu, Yuting Deng, Daniel A. McFarland, Michael S. Bernstein
2023 J jnl
CoRR
Weixin Liang, Yuhui Zhang, Hancheng Cao, Binglu Wang, Daisy Ding, Xinyu Yang, Kailas Vodrahalli, Siyu He, Daniel Scott Smith, Yian Yin, Daniel A. McFarland, James Zou
2023 J jnl
CoRR
Hancheng Cao, Sofia Eleni Spatharioti, Daniel G. Goldstein, Jake M. Hofman
2023 J jnl
Trans. Mach. Learn. Res.
Mina Lee, Megha Srivastava, Amelia Hardy, John Thickstun, Esin Durmus, Ashwin Paranjape, Ines Gerard-Ursin, Xiang Lisa Li, Faisal Ladhak, Frieda Rong, Rose E. Wang, Minae Kwon, Joon Sung Park, Hancheng Cao, Tony Lee, Rishi Bommasani, Michael S. Bernstein, Percy Liang
2023 J jnl
IEEE Trans. Knowl. Data Eng.
Yuan Yuan, Fengli Xu, Hancheng Cao, Guozhen Zhang, Pan Hui, Yong Li, Depeng Jin
2023 J jnl
CoRR
Hancheng Cao, Jesse Dodge, Kyle Lo, Daniel A. McFarland, Lucy Lu Wang
2023 J jnl
IEEE Trans. Knowl. Data Eng.
Yali Fan, Zhen Tu, Tong Li, Hancheng Cao, Tong Xia, Yong Li, Xiang Chen, Lin Zhang
2023 J jnl
CoRR
Jie Li, Hancheng Cao, Laura Lin, Youyang Hou, Ruihao Zhu, Abdallah El Ali
2022 A* conf
CHI
Zhilong Chen, Hancheng Cao, Xiaochong Lan, Zhicong Lu, Yong Li
2022 J jnl
CoRR
Zhilong Chen, Hancheng Cao, Xiaochong Lan, Zhicong Lu, Yong Li
2022 J jnl
ACM Trans. Knowl. Discov. Data
Huandong Wang, Yong Li, Junjie Lin, Hancheng Cao, Depeng Jin
2022 J jnl
CoRR
Mina Lee, Megha Srivastava, Amelia Hardy, John Thickstun, Esin Durmus, Ashwin Paranjape, Ines Gerard-Ursin, Xiang Lisa Li, Faisal Ladhak, Frieda Rong, Rose E. Wang, Minae Kwon, Joon Sung Park, Hancheng Cao, Tony Lee, Rishi Bommasani, Michael S. Bernstein, Percy Liang
2022 J jnl
CoRR
Zhilong Chen, Jinghua Piao, Xiaochong Lan, Hancheng Cao, Chen Gao, Zhicong Lu, Yong Li
2022 J jnl
Proc. ACM Hum. Comput. Interact.
Zhilong Chen, Jinghua Piao, Xiaochong Lan, Hancheng Cao, Chen Gao, Zhicong Lu, Yong Li
2022 J jnl
IEEE Trans. Knowl. Data Eng.
Jie Feng, Yong Li, Zeyu Yang, Mingyang Zhang, Huandong Wang, Hancheng Cao, Depeng Jin
2021 A* conf
WWW
Guozhen Zhang, Yong Li, Yuan Yuan, Fengli Xu, Hancheng Cao, Yujian Xu, Depeng Jin
2021 J jnl
CCF Trans. Pervasive Comput. Interact.
Zhen Tu, Hancheng Cao, Eemil Lagerspetz, Yali Fan, Huber Flores, Sasu Tarkoma, Petteri Nurmi, Yong Li
2021 A* conf
CHI
Hancheng Cao, Chia-Jung Lee, Shamsi T. Iqbal, Mary Czerwinski, Priscilla N. Y. Wong, Sean Rintel, Brent J. Hecht, Jaime Teevan, Longqi Yang
2021 J jnl
CoRR
Hancheng Cao, Chia-Jung Lee, Shamsi T. Iqbal, Mary Czerwinski, Priscilla N. Y. Wong, Sean Rintel, Brent J. Hecht, Jaime Teevan, Longqi Yang
2021 A* conf
CHI
Zhilong Chen, Hancheng Cao, Yuting Deng, Xuan Gao, Jinghua Piao, Fengli Xu, Yu Zhang, Yong Li
2021 J jnl
IEEE Trans. Knowl. Data Eng.
Hongzhi Shi, Yong Li, Hancheng Cao, Xiangxin Zhou, Chao Zhang, Vassilis Kostakos
2021 J jnl
Proc. ACM Hum. Comput. Interact.
Hancheng Cao, Zhilong Chen, Mengjie Cheng, Shuling Zhao, Tao Wang, Yong Li
2020 A* conf
WWW
Tong Li, Mingyang Zhang, Hancheng Cao, Yong Li, Sasu Tarkoma, Pan Hui
2020 J jnl
CoRR
Zhilong Chen, Hancheng Cao, Yuting Deng, Xuan Gao, Jinghua Piao, Fengli Xu, Yu Zhang, Yong Li
2020 J jnl
IEEE Trans. Mob. Comput.
Hancheng Cao, Fengli Xu, Jagan Sankaranarayanan, Yong Li, Hanan Samet
2020 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Zongyu Lin, Shiqing Lyu, Hancheng Cao, Fengli Xu, Yuqiong Wei, Hanan Samet, Yong Li
2020 J jnl
CoRR
Hancheng Cao, Vivian Yang, Victor Chen, Yu Jin Lee, Lydia Stone, N'godjigui Junior Diarrassouba, Mark E. Whiting, Michael S. Bernstein
2020 J jnl
Proc. ACM Hum. Comput. Interact.
Hancheng Cao, Vivian Yang, Victor Chen, Yu Jin Lee, Lydia Stone, N'godjigui Junior Diarrassouba, Mark E. Whiting, Michael S. Bernstein
2020 J jnl
CoRR
Zhilong Chen, Hancheng Cao, Fengli Xu, Mengjie Cheng, Tao Wang, Yong Li
2020 J jnl
Proc. ACM Hum. Comput. Interact.
Zhilong Chen, Hancheng Cao, Fengli Xu, Mengjie Cheng, Tao Wang, Yong Li
2020 A conf
ICWSM
Hancheng Cao, Zhilong Chen, Fengli Xu, Tao Wang, Yujian Xu, Lianglun Zhang, Yong Li
2020 J jnl
CoRR
Hancheng Cao, Mengjie Cheng, Zhepeng Cen, Daniel A. McFarland, Xiang Ren
2020 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Zhilong Chen, Hancheng Cao, Huandong Wang, Fengli Xu, Vassilis Kostakos, Yong Li
2020 conf
EMNLP (Findings)
Hancheng Cao, Mengjie Cheng, Zhepeng Cen, Daniel A. McFarland, Xiang Ren
2020 J jnl
CoRR
Hancheng Cao, Zhilong Chen, Mengjie Cheng, Shuling Zhao, Tao Wang, Yong Li
2019 A conf
SDM
Hongzhi Shi, Hancheng Cao, Xiangxin Zhou, Yong Li, Chao Zhang, Vassilis Kostakos, Funing Sun, Fanchao Meng
2019 J jnl
ACM Trans. Spatial Algorithms Syst.
Hancheng Cao, Jagan Sankaranarayanan, Jie Feng, Yong Li, Hanan Samet
2019 J jnl
Electron. Mark.
Ming Zeng, Hancheng Cao, Min Chen, Yong Li
2019 J jnl
CoRR
Hancheng Cao, Zhilong Chen, Fengli Xu, Tao Wang, Yujian Xu, Lianglun Zhang, Yong Li
2018 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Fengli Xu, Tong Xia, Hancheng Cao, Yong Li, Funing Sun, Fanchao Meng
2018 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Hancheng Cao, Zhilong Chen, Fengli Xu, Yong Li, Vassilis Kostakos
2018 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Hancheng Cao, Jie Feng, Yong Li, Vassilis Kostakos
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)