Weimin Xiao

65 papers A* 3A 1B 14C 5Misc 4Journal 13Unranked 20
YearRankTypeTitle / Venue / Authors
2024 conf
IEEECONF
Lina Liu, Weimin Xiao, Jialing Liu, Zhigang Rong
2024 conf
ICC
Baoling Sheen, Yifei Song, Juan Roa, Zhigang Rong, Renjian Zhao, Weimin Xiao
2024 conf
VTC Spring
Nurettin Turan, Benedikt Fesl, Michael Joham, Zhengxiang Ma, Baoling Sheen, Weimin Xiao, Anthony C. K. Soong, Wolfgang Utschick
2024 J jnl
CoRR
Nurettin Turan, Benedikt Fesl, Michael Joham, Zhengxiang Ma, Anthony C. K. Soong, Baoling Sheen, Weimin Xiao, Wolfgang Utschick
2024 J jnl
IEEE Trans. Ind. Informatics
Min Wen, Jiajun Song, Weiqing Min, Weimin Xiao, Lin Han, Shuqiang Jiang
2024 Misc conf
ICNC
Yifei Song, Juan Roa, Renjian Zhao, Zhigang Rong, Weimin Xiao, Jalal Jalali, Baoling Sheen
2021 book
Wan Lei, Anthony C. K. Soong, Jianghua Liu, Wu Yong, Brian K. Classon, Weimin Xiao, David Mazzarese, Zhao Yang, Tony Saboorian
2021 J jnl
IEEE Trans. Wirel. Commun.
Hao Zhou, Michael L. Honig, Jialing Liu, Weimin Xiao
2021 B conf
WCNC
Philipp Walk, Weimin Xiao
2019 B conf
GLOBECOM
Hao Zhou, Michael L. Honig, Jialing Liu, Weimin Xiao
2019 conf
VTC Fall
Jialing Liu, Qian Cheng, Weimin Xiao, Diana Maamari, Anthony C. K. Soong
2018 conf
VTC Fall
Hao Zhou, Jialing Liu, Qian Cheng, Diana Maamari, Weimin Xiao, Anthony C. K. Soong
2018 J jnl
IEEE Trans. Wirel. Commun.
Dalin Zhu, Junil Choi, Qian Cheng, Weimin Xiao, Robert W. Heath Jr.
2018 J jnl
CoRR
Dalin Zhu, Junil Choi, Qian Cheng, Weimin Xiao, Robert W. Heath Jr.
2017 conf
VTC Fall
Murali Narasimha, Vip Desai, George Calcev, Weimin Xiao, Philippe J. Sartori, Anthony C. K. Soong
2017 conf
VTC Spring
Hao Ge, Zhiyi Zhou, Jialing Liu, Weimin Xiao
2016 J jnl
IEEE Commun. Mag.
Jialing Liu, Weimin Xiao
2016 conf
VTC Fall
Zhiyi Zhou, Hao Ge, Jialing Liu, Weimin Xiao
2016 Misc conf
ICNC
Zhiyi Zhou, Fei Teng, Jialing Liu, Weimin Xiao
2015 ch.
Design and Deployment of Small Cell Networks
Weimin Xiao, Jialing Liu, Anthony C. K. Soong
2015 ch.
Design and Deployment of Small Cell Networks
Jialing Liu, Weimin Xiao, Anthony C. K. Soong
2015 Misc conf
ACSSC
Jialing Liu, Weimin Xiao
2015 B conf
WCNC
Binnan Zhuang, Jialing Liu, Weimin Xiao
2014 conf
VTC Fall
Philippe J. Sartori, Hossein Bagheri, Vip Desai, Brian K. Classon, Anthony C. K. Soong, Mazin Al-Shalash, Weimin Xiao, Deping Liu
2014 Misc conf
ACSSC
Vip Desai, Lukasz Krzymien, Philippe J. Sartori, Weimin Xiao, Anthony C. K. Soong, Ahmed Alkhateeb
2012 J jnl
IEEE Commun. Mag.
Juho Lee, Younsun Kim, Hyojin Lee, Boon Loong Ng, David Mazzarese, Jianghua Liu, Weimin Xiao, Yongxing Zhou
2012 conf
GLOBECOM Workshops
Fei Teng, Dongning Guo, Michael L. Honig, Weimin Xiao, Jialing Liu
2008 conf
ICYCS
Huaqiang Yuan, Weimin Xiao, Guoqiang Han
2008 C conf
ICMLA
Fatemeh Vafaee, Weimin Xiao, Peter C. Nelson, Chi Zhou
2008 conf
ISWCS
Amitava Ghosh, Weimin Xiao, Rapeepat Ratasuk, Alan Rottinghaus, Brian K. Classon
2008 B conf
PIMRC
Rapeepat Ratasuk, Amitava Ghosh, Weimin Xiao, Robert Love, Ravi Nory, Brian K. Classon
2007 conf
VTC Fall
Xiang Chen, Xiaowei Jin, Prakash Moorut, Robert Love, Yakun Sun, Weimin Xiao, Amitava Ghosh, Edgar Fernandes
2007 ch.
NICSO
Fatemeh Vafaee, Peter C. Nelson, Chi Zhou, Weimin Xiao
2007 C conf
ICMLA
Qiongyun Zhang, Chi Zhou, Weimin Xiao, Peter C. Nelson
2007 ch.
NICSO
Brian M. Cerny, Chi Zhou, Weimin Xiao, Peter C. Nelson
2007 B conf
SMC
Magdi A. Mohamed, Weimin Xiao
2007 B conf
SMC
Magdi A. Mohamed, Weimin Xiao
2007 B conf
SMC
Magdi A. Mohamed, Weimin Xiao
2007 B conf
SMC
Weimin Xiao, Magdi A. Mohamed
2007 conf
VTC Spring
Amitava Ghosh, Rapeepat Ratasuk, Igor Filipovich, Jun Tan, Weimin Xiao
2007 B conf
PIMRC
Amitava Ghosh, Rapeepat Ratasuk, Weimin Xiao, Brian K. Classon, Vijay Nangia, Robert Love, Dale Schwent, David Wilson
2007 conf
VTC Spring
Ravi Nory, Ravi Kuchibhotla, Robert Love, Yakun Sun, Weimin Xiao
2006 B conf
FUZZ-IEEE
Magdi A. Mohamed, Weimin Xiao
2006 C conf
WOWMOM
Tony Dean, Dennis Schaeffer, Weimin Xiao, Fan Wang
2006 C conf
ICMLA
Xin Li, Chi Zhou, Weimin Xiao, Peter C. Nelson
2006 conf
VTC Fall
Yakun Sun, Weimin Xiao, Robert Love, Kenneth Stewart, Amitava Ghosh, Rapeepat Ratasuk, Brian K. Classon
2006 A* conf
KDD
Kaidi Zhao, Bing Liu, Jeffrey Benkler, Weimin Xiao
2006 conf
VTC Fall
Brian K. Classon, Kevin L. Baum, Vijay Nangia, Robert Love, Yakun Sun, Ravi Nory, Kenneth Stewart, Amitava Ghosh, Rapeepat Ratasuk, Weimin Xiao, Jun Tan
2006 A* conf
KDD
Bing Liu, Kaidi Zhao, Jeffrey Benkler, Weimin Xiao
2006 conf
VTC Fall
Weimin Xiao, Rapeepat Ratasuk, Amitava Ghosh, Robert Love, Yakun Sun, Ravi Nory
2005 A* conf
ICDM
Kaidi Zhao, Bing Liu, Thomas M. Tirpak, Weimin Xiao
2005 C conf
ICMLA
Xin Li, Chi Zhou, Weimin Xiao, Peter C. Nelson
2005 J jnl
IEEE Trans. Inf. Theory
Weimin Xiao, Michael L. Honig
2005 A conf
CIKM
Kaidi Zhao, Bing Liu, Thomas M. Tirpak, Weimin Xiao
2005 B conf
PIMRC
Weimin Xiao, Rapeepat Ratasuk, Amitava Ghosh, Robert Love
2004 conf
VTC Fall (2)
Rapeepat Ratasuk, Weimin Xiao, Amitava Ghosh
2004 B conf
ISIT
Weimin Xiao
2004 B conf
WCNC
Weimin Xiao, Rapeepat Ratasuk
2004 B conf
COLING
Zhuli Xie, Xin Li, Barbara Di Eugenio, Weimin Xiao, Thomas M. Tirpak, Peter C. Nelson
2003 J jnl
IEEE Trans. Evol. Comput.
Chi Zhou, Weimin Xiao, Thomas M. Tirpak, Peter C. Nelson
2003 conf
ICC
Weimin Xiao
2003 J jnl
IEEE Trans. Fuzzy Syst.
Magdi A. Mohamed, Weimin Xiao
2002 J jnl
IEEE Trans. Wirel. Commun.
Weimin Xiao, Michael L. Honig
2002 J jnl
IEEE Trans. Commun.
Michael Mao Wang, Weimin Xiao, Tyler Brown
2001 J jnl
IEEE Trans. Inf. Theory
Michael L. Honig, Weimin Xiao
redb/extractors/decompiler/bninja/analysis/cfg.py
← Index redb/extractors/decompiler/bninja/analysis/cfg.py python
from binaryninja.enums import LowLevelILOperation as LLIL_OP

# Support both package and standalone imports
try:
    from . import cfg_features
except ImportError:
    from redb.extractors.decompiler.bninja.analysis import cfg_features


# ---------------------------------------------------------------------------
# Task 2.2: Build LLIL operation maps at import time using real enum values
# ---------------------------------------------------------------------------

# Prime product map: LLIL operation integer value -> small prime
cfg_features.LLIL_OP_PRIMES = {
    # SET_REG, SET_REG_SPLIT
    LLIL_OP.LLIL_SET_REG.value: 2,
    LLIL_OP.LLIL_SET_REG_SPLIT.value: 2,
    # SET_FLAG
    LLIL_OP.LLIL_SET_FLAG.value: 3,
    # LOAD
    LLIL_OP.LLIL_LOAD.value: 5,
    # STORE
    LLIL_OP.LLIL_STORE.value: 7,
    # PUSH, POP
    LLIL_OP.LLIL_PUSH.value: 11,
    LLIL_OP.LLIL_POP.value: 13,
    # CALL, TAILCALL, SYSCALL
    LLIL_OP.LLIL_CALL.value: 17,
    LLIL_OP.LLIL_TAILCALL.value: 17,
    LLIL_OP.LLIL_SYSCALL.value: 19,
    # RET, NORET
    LLIL_OP.LLIL_RET.value: 23,
    LLIL_OP.LLIL_NORET.value: 23,
    # IF, GOTO
    LLIL_OP.LLIL_IF.value: 29,
    LLIL_OP.LLIL_GOTO.value: 31,
    # ADD, SUB
    LLIL_OP.LLIL_ADD.value: 37,
    LLIL_OP.LLIL_SUB.value: 41,
    # AND, OR, XOR
    LLIL_OP.LLIL_AND.value: 43,
    LLIL_OP.LLIL_OR.value: 47,
    LLIL_OP.LLIL_XOR.value: 53,
    # LSL, LSR, ASR, ROL, ROR
    LLIL_OP.LLIL_LSL.value: 59,
    LLIL_OP.LLIL_LSR.value: 61,
    LLIL_OP.LLIL_ASR.value: 67,
    LLIL_OP.LLIL_ROL.value: 71,
    LLIL_OP.LLIL_ROR.value: 73,
    # MUL, DIVU, DIVS, MODU, MODS
    LLIL_OP.LLIL_MUL.value: 79,
    LLIL_OP.LLIL_DIVU.value: 83,
    LLIL_OP.LLIL_DIVS.value: 83,
    LLIL_OP.LLIL_MODU.value: 89,
    LLIL_OP.LLIL_MODS.value: 89,
    # NEG, NOT
    LLIL_OP.LLIL_NEG.value: 97,
    LLIL_OP.LLIL_NOT.value: 101,
    # CMP_E, CMP_NE, CMP_SLT, CMP_ULT, CMP_SLE, CMP_ULE
    # CMP_SGT, CMP_UGT, CMP_SGE, CMP_UGE
    LLIL_OP.LLIL_CMP_E.value: 103,
    LLIL_OP.LLIL_CMP_NE.value: 103,
    LLIL_OP.LLIL_CMP_SLT.value: 107,
    LLIL_OP.LLIL_CMP_ULT.value: 107,
    LLIL_OP.LLIL_CMP_SLE.value: 109,
    LLIL_OP.LLIL_CMP_ULE.value: 109,
    LLIL_OP.LLIL_CMP_SGT.value: 113,
    LLIL_OP.LLIL_CMP_UGT.value: 113,
    LLIL_OP.LLIL_CMP_SGE.value: 127,
    LLIL_OP.LLIL_CMP_UGE.value: 127,
    # NOP
    LLIL_OP.LLIL_NOP.value: 1,
    # SX, ZX, LOW_PART, BOOL_TO_INT
    LLIL_OP.LLIL_SX.value: 131,
    LLIL_OP.LLIL_ZX.value: 137,
    LLIL_OP.LLIL_LOW_PART.value: 139,
    LLIL_OP.LLIL_BOOL_TO_INT.value: 149,
    # JUMP, JUMP_TO
    LLIL_OP.LLIL_JUMP.value: 151,
    LLIL_OP.LLIL_JUMP_TO.value: 151,
}

# Category map: LLIL operation integer value -> category index
_ARITHMETIC = {
    LLIL_OP.LLIL_ADD, LLIL_OP.LLIL_ADC, LLIL_OP.LLIL_SUB, LLIL_OP.LLIL_SBB,
    LLIL_OP.LLIL_MUL, LLIL_OP.LLIL_MULU_DP, LLIL_OP.LLIL_MULS_DP,
    LLIL_OP.LLIL_DIVU, LLIL_OP.LLIL_DIVU_DP, LLIL_OP.LLIL_DIVS,
    LLIL_OP.LLIL_DIVS_DP, LLIL_OP.LLIL_MODU, LLIL_OP.LLIL_MODS,
    LLIL_OP.LLIL_NEG,
}
_LOGIC = {
    LLIL_OP.LLIL_AND, LLIL_OP.LLIL_OR, LLIL_OP.LLIL_XOR, LLIL_OP.LLIL_NOT,
    LLIL_OP.LLIL_LSL, LLIL_OP.LLIL_LSR, LLIL_OP.LLIL_ASR,
    LLIL_OP.LLIL_ROL, LLIL_OP.LLIL_RLC, LLIL_OP.LLIL_ROR, LLIL_OP.LLIL_RRC,
}
_TRANSFER = {
    LLIL_OP.LLIL_SET_REG, LLIL_OP.LLIL_SET_REG_SPLIT, LLIL_OP.LLIL_SET_FLAG,
    LLIL_OP.LLIL_GOTO, LLIL_OP.LLIL_IF, LLIL_OP.LLIL_JUMP, LLIL_OP.LLIL_JUMP_TO,
    LLIL_OP.LLIL_RET, LLIL_OP.LLIL_NORET, LLIL_OP.LLIL_PUSH, LLIL_OP.LLIL_POP,
}
_CALL = {
    LLIL_OP.LLIL_CALL, LLIL_OP.LLIL_TAILCALL, LLIL_OP.LLIL_SYSCALL,
}
_COMPARISON = {
    LLIL_OP.LLIL_CMP_E, LLIL_OP.LLIL_CMP_NE,
    LLIL_OP.LLIL_CMP_SLT, LLIL_OP.LLIL_CMP_ULT,
    LLIL_OP.LLIL_CMP_SLE, LLIL_OP.LLIL_CMP_ULE,
    LLIL_OP.LLIL_CMP_SGE, LLIL_OP.LLIL_CMP_UGE,
    LLIL_OP.LLIL_CMP_SGT, LLIL_OP.LLIL_CMP_UGT,
    LLIL_OP.LLIL_TEST_BIT, LLIL_OP.LLIL_FLAG_COND,
}
_MEMORY = {
    LLIL_OP.LLIL_LOAD, LLIL_OP.LLIL_STORE,
}

cfg_features.LLIL_OP_CATEGORIES = {}
for _op in _ARITHMETIC:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_ARITHMETIC
for _op in _LOGIC:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_LOGIC
for _op in _TRANSFER:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_TRANSFER
for _op in _CALL:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_CALL
for _op in _COMPARISON:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_COMPARISON
for _op in _MEMORY:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_MEMORY

# Set of CALL operation values for counting
_CALL_OPS = {op.value for op in _CALL}


# ---------------------------------------------------------------------------
# Task 2.1 + 2.3: Rewritten CFGAnalysis
# ---------------------------------------------------------------------------

class CFGAnalysis:
    def __init__(self, function, llil_function=None):
        self.function = function
        self.llil_function = llil_function

    def extract_function_cfg(self):
        """Extract function-level CFG features as a flat dictionary."""

        if self.function is None:
            return None

        blocks = list(self.function.basic_blocks)
        if not blocks:
            return None

        n = len(blocks)

        # 1. Build index-based adjacency from Binary Ninja blocks
        addr_to_idx = {b.start: i for i, b in enumerate(blocks)}
        successors = [[] for _ in range(n)]
        predecessors = [[] for _ in range(n)]
        for i, block in enumerate(blocks):
            for edge in block.outgoing_edges:
                if edge.target is None:
                    continue
                target_idx = addr_to_idx.get(edge.target.start)
                if target_idx is not None:
                    successors[i].append(target_idx)
                    predecessors[target_idx].append(i)

        # 2. BFS order (reusable across multiple features)
        bfs = cfg_features.bfs_order(successors, n)

        # 3. Collect per-block LLIL operations (for prime product + ACFG features)
        block_llil_ops = self._collect_block_llil_ops(blocks, addr_to_idx, n)
        all_llil_ops = [op for block_ops in block_llil_ops for op in block_ops]

        # 4. Structural counts
        edge_count = sum(len(s) for s in successors)
        total_llil = sum(len(ops) for ops in block_llil_ops)
        call_count = sum(
            1 for ops in block_llil_ops for op in ops
            if op in _CALL_OPS
        )

        # 5. Compute all features
        bb_features = cfg_features.build_block_features(block_llil_ops, successors, n)

        return {
            "cfg_topology_hash": cfg_features.compute_topology_hash(successors, bfs, n),
            "block_count": n,
            "edge_count": edge_count,
            "llil_total_operations": total_llil,
            "call_count": call_count,
            "cyclomatic_complexity": edge_count - n + 2,
            "loop_count": cfg_features.count_back_edges(successors, n),
            "max_depth": cfg_features.bfs_max_depth(successors, n),
            "max_fan_out": max((len(s) for s in successors), default=0),
            "md_index_topdown": cfg_features.compute_md_index_topdown(successors, predecessors, bfs),
            "md_index_bottomup": cfg_features.compute_md_index_bottomup(successors, predecessors, n),
            "prime_product_llil": cfg_features.compute_prime_product(all_llil_ops),
            "cfg_feature_tlsh": cfg_features.compute_cfg_feature_tlsh(bb_features, bfs),
            "wl_minhash": cfg_features.compute_wl_minhash(successors, predecessors, bb_features, n),
            "bb_features": bb_features,
            "cfg_adjacency": cfg_features.pack_adjacency(successors),
        }

    def _collect_block_llil_ops(self, blocks, addr_to_idx, n):
        """
        Collect LLIL operation integers per native basic block.
        Walks the full expression tree of each instruction so that
        nested operations (e.g. ADD inside SET_REG) are captured.
        Returns list of n lists, one per block.
        """
        block_ops = [[] for _ in range(n)]

        if self.llil_function is None:
            return block_ops

        try:
            for llil_block in self.llil_function.basic_blocks:
                # Map LLIL block to native block via source_block
                if llil_block.source_block is not None:
                    native_idx = addr_to_idx.get(llil_block.source_block.start)
                    if native_idx is not None:
                        for instr in llil_block:
                            self._walk_llil_ops(instr, block_ops[native_idx])
        except Exception:
            pass  # Return empty ops — LLIL-dependent fields will be 0/null

        return block_ops

    @staticmethod
    def _walk_llil_ops(expr, ops_list):
        """Collect operation values from an LLIL expression tree iteratively."""
        stack = [expr]
        while stack:
            node = stack.pop()
            if hasattr(node, 'operation'):
                ops_list.append(node.operation.value)
            if hasattr(node, 'operands'):
                for operand in node.operands:
                    if hasattr(operand, 'operation'):
                        stack.append(operand)