Weidong Mei

190 papers B 17Misc 2Journal 143Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Wirel. Commun. Lett.
Changhao Liu, Weidong Mei, Zhi Chen, Jun Fang, Boyu Ning
2026 J jnl
IEEE Commun. Surv. Tutorials
Lipeng Zhu, Wenyan Ma, Weidong Mei, Yong Zeng, Qingqing Wu, Boyu Ning, Zhenyu Xiao, Xiaodan Shao, Jun Zhang, Rui Zhang
2026 J jnl
IEEE Commun. Surv. Tutorials
Xiaodan Shao, Weidong Mei, Changsheng You, Qingqing Wu, Beixiong Zheng, Cheng-Xiang Wang, Junling Li, Rui Zhang, Robert Schober, Lipeng Zhu, Weihua Zhuang, Xuemin Shen
2026 J jnl
IEEE Trans. Wirel. Commun.
Huan Huang, Hongliang Zhang, Jide Yuan, Luyao Sun, Yitian Wang, Weidong Mei, Boya Di, Yi Cai, Zhu Han
2026 J jnl
IEEE Trans. Wirel. Commun.
Songjie Yang, Zihang Wan, Boyu Ning, Weidong Mei, Jiancheng An, Yonina C. Eldar, Chau Yuen
2026 J jnl
IEEE Trans. Wirel. Commun.
Haocheng Hua, Yuyan Zhou, Weidong Mei, Jie Xu, Rui Zhang
2026 J jnl
IEEE Trans. Veh. Technol.
Jionghui Wang, Jun Fang, Weidong Mei
2026 J jnl
IEEE Wirel. Commun.
Qingqing Wu, Ziyuan Zheng, Ying Gao, Weidong Mei, Xin Wei, Wen Chen, Boyu Ning
2026 J jnl
IEEE Trans. Wirel. Commun.
Ying Gao, Qingqing Wu, Weidong Mei, Guangji Chen, Wen Chen, Ziyuan Zheng
2026 J jnl
IEEE Trans. Veh. Technol.
Jie Feng, Beixiong Zheng, Weidong Mei, Yida Wang, Qingjie Wu, Fangjiong Chen
2026 J jnl
IEEE Wirel. Commun. Lett.
Dong Wang, Weidong Mei, Zhi Chen, Boyu Ning
2026 J jnl
IEEE Trans. Wirel. Commun.
Dong Wang, Weidong Mei, Boyu Ning, Zhi Chen, Rui Zhang
2026 J jnl
IEEE Wirel. Commun. Lett.
Di Zhou, Weidong Mei, Zhiquan Bai, Na Li, Tony Q. S. Quek
2026 J jnl
IEEE Wirel. Commun. Lett.
Liujia Yao, Changsheng You, Chao Zhou, Beixiong Zheng, Weidong Mei
2026 J jnl
IEEE Commun. Surv. Tutorials
Boyu Ning, Haifan Yin, Sixu Liu, Hao Deng, Songjie Yang, Yuchen Zhang, Weidong Mei, David Gesbert, Jaebum Park, Robert W. Heath Jr., Emil Björnson
2026 J jnl
CoRR
Boyu Ning, Haifan Yin, Sixu Liu, Hao Deng, Songjie Yang, Yuchen Zhang, Weidong Mei, David Gesbert, Jaebum Park, Robert W. Heath Jr., Emil Björnson
2026 J jnl
CoRR
Qi Dai, Beixiong Zheng, Yanhua Tan, Weidong Mei, Shiqi Gong, Jie Tang, Chengwen Xing
2026 J jnl
IEEE Wirel. Commun. Lett.
Qi Dai, Beixiong Zheng, Yanhua Tan, Weidong Mei, Shiqi Gong, Jie Tang, Chengwen Xing
2026 J jnl
CoRR
Qiyao Wang, Beixiong Zheng, Xue Xiong, Weidong Mei, Changsheng You, Qingqing Wu, Jie Tang
2026 J jnl
CoRR
Lei Xie, Peilan Wang, Guanxiong Shen, Guyue Li, Weidong Mei, Liquan Chen
2026 J jnl
IEEE Trans. Wirel. Commun.
Honghao Wang, Qingqing Wu, Ying Gao, Wen Chen, Weidong Mei, Guojie Hu, Lexi Xu
2026 J jnl
IEEE Trans. Wirel. Commun.
Qingliang Li, Weidong Mei, Rui Zhang, Boyu Ning
2026 J jnl
IEEE Trans. Wirel. Commun.
Changhao Liu, Weidong Mei, Peilan Wang, Yinuo Meng, Zhi Chen, Boyu Ning
2026 J jnl
IEEE Trans. Veh. Technol.
Zi Zhang, Weidong Mei, Beixiong Zheng, Xinhang Wei, Zhi Chen
2025 J jnl
IEEE Internet Things J.
Qingliang Li, Bo Chang, Meng Li, Weidong Mei, Zhi Chen
2025 J jnl
CoRR
Lipeng Zhu, Wenyan Ma, Weidong Mei, Yong Zeng, Qingqing Wu, Boyu Ning, Zhenyu Xiao, Xiaodan Shao, Jun Zhang, Rui Zhang
2025 J jnl
CoRR
Xiaodan Shao, Weidong Mei, Changsheng You, Qingqing Wu, Beixiong Zheng, Cheng-Xiang Wang, Junling Li, Rui Zhang, Robert Schober, Lipeng Zhu, Weihua Zhuang, Xuemin Shen
2025 conf
ICC Workshops
Yushen Wang, Weidong Mei, Xin Wei, Boyu Ning, Zhi Chen
2025 conf
SPAWC
Yitai Huang, Weidong Mei, Xin Wei, Zhi Chen, Boyu Ning
2025 J jnl
IEEE J. Sel. Areas Commun.
Shiyuan Sun, Fang Yang, Weidong Mei, Jian Song, Zhu Han, Rui Zhang
2025 J jnl
CoRR
Xin Wei, Weidong Mei, Xuan Huang, Zhi Chen, Boyu Ning
2025 J jnl
Sci. China Inf. Sci.
Cong Zhou, Changsheng You, Shuo Shi, Weidong Mei
2025 conf
ICC Workshops
Haocheng Hua, Yuyan Zhou, Weidong Mei, Jie Xu, Rui Zhang
2025 J jnl
CoRR
Qingliang Li, Bo Chang, Weidong Mei, Zhi Chen
2025 B conf
PIMRC
Lele Lu, Weidong Mei, Xin Wei, Haocheng Hua, Zhi Chen, Boyu Ning
2025 B conf
GLOBECOM
Xin Wei, Weidong Mei, Xuan Huang, Zhi Chen, Boyu Ning
2025 J jnl
CoRR
Xin Wei, Weidong Mei, Xuan Huang, Zhi Chen, Boyu Ning
2025 J jnl
CoRR
Yushen Wang, Weidong Mei, Xin Wei, Ya Fei Wu, Zhi Chen, Boyu Ning
2025 J jnl
IEEE Trans. Commun.
Nianzu Li, Weidong Mei, Peiran Wu, Boyu Ning, Lipeng Zhu
2025 J jnl
IEEE Commun. Lett.
Xiangyu Dong, Wanting Lyu, Ran Yang, Yue Xiu, Weidong Mei, Zhongpei Zhang
2025 J jnl
IEEE Wirel. Commun.
Boyu Ning, Songjie Yang, Yafei Wu, Peilan Wang, Weidong Mei, Chau Yuen, Emil Björnson
2025 J jnl
CoRR
Xin Wei, Weidong Mei, Qingqing Wu, Qiaoran Jia, Boyu Ning, Zhi Chen, Jun Fang
2025 J jnl
IEEE Trans. Commun.
Xin Wei, Weidong Mei, Qingqing Wu, Qiaoran Jia, Boyu Ning, Zhi Chen, Jun Fang
2025 B conf
WCNC
Xin Wei, Weidong Mei, Qingqing Wu, Boyu Ning, Zhi Chen
2025 J jnl
Sci. China Inf. Sci.
Ke Liu, Xin Wei, Weidong Mei, Xinhang Wei, Zhi Chen, Boyu Ning
2025 J jnl
CoRR
Xuanlin Shen, Xin Wei, Weidong Mei, Zhi Chen, Jun Fang, Boyu Ning
2025 J jnl
IEEE Wirel. Commun. Lett.
Xuanlin Shen, Xin Wei, Weidong Mei, Zhi Chen, Jun Fang, Boyu Ning
2025 B conf
PIMRC
Wenqi Ye, Weidong Mei, Dong Wang, Zhi Chen
2025 J jnl
IEEE Trans. Commun.
Yapeng Zhao, Qingqing Wu, Wen Chen, Yong Zeng, Ruiqi Liu, Weidong Mei, Fen Hou, Shaodan Ma
2025 conf
VTC2025-Fall
Aoran Liu, Weidong Mei, Peilan Wang, Dong Wang, Ya Fei Wu, Zhi Chen, Boyu Ning
2025 J jnl
IEEE Wirel. Commun.
Shiyuan Sun, Fang Yang, Weidong Mei, Jian Song, Zhu Han, Rui Zhang
2025 J jnl
IEEE Wirel. Commun. Lett.
Nianzu Li, Peiran Wu, Boyu Ning, Lipeng Zhu, Weidong Mei
2025 J jnl
IEEE Trans. Veh. Technol.
Boyu Ning, Nianzu Li, Weidong Mei, Songjie Yang, Yuchen Zhang
2025 J jnl
CoRR
Liujia Yao, Changsheng You, Chao Zhou, Beixiong Zheng, Weidong Mei
2025 J jnl
CoRR
He Sun, Lipeng Zhu, Weidong Mei, Rui Zhang
2025 J jnl
IEEE Trans. Wirel. Commun.
He Sun, Lipeng Zhu, Weidong Mei, Rui Zhang
2025 J jnl
IEEE Commun. Lett.
Yijie Liu, Weidong Mei, He Sun, Dong Wang, Zhi Chen
2025 B conf
WCNC
He Sun, Lipeng Zhu, Weidong Mei, Rui Zhang
2025 J jnl
IEEE Wirel. Commun. Lett.
Zhipei Liu, Beixiong Zheng, Qingjie Wu, Changsheng You, Weidong Mei, Kangxian Chen, Jie Tang
2025 J jnl
IEEE Commun. Lett.
Haifeng Ma, Weidong Mei, Xin Wei, Boyu Ning, Zhi Chen
2025 J jnl
CoRR
Haifeng Ma, Weidong Mei, Xin Wei, Boyu Ning, Zhi Chen
2025 J jnl
CoRR
Bonan An, Weidong Mei, Yuanwei Liu, Zhi Chen
2025 B conf
WCNC
Qingliang Li, Bo Chang, Weidong Mei, Zhi Chen
2025 conf
VTC2025-Fall
Peilan Wang, Yuting Lin, Lei Xie, Weidong Mei, Jun Fang
2025 conf
ICC Workshops
Yike Xie, Weidong Mei, Dong Wang, Boyu Ning, Zhi Chen, Jun Fang, Wei Guo
2025 J jnl
IEEE Wirel. Commun. Lett.
Peilan Wang, Yu Xue, Weidong Mei, Jun Fang, Rui Zhang
2024 B conf
GLOBECOM
Shiyuan Sun, Fang Yang, Weidong Mei, Jian Song, Zhu Han, Rui Zhang
2024 J jnl
CoRR
Shiyuan Sun, Fang Yang, Weidong Mei, Jian Song, Zhu Han, Rui Zhang
2024 J jnl
CoRR
Shiyuan Sun, Fang Yang, Weidong Mei, Jian Song, Zhu Han, Rui Zhang
2024 J jnl
IEEE Trans. Wirel. Commun.
Boyu Ning, Weidong Mei, Lipeng Zhu, Zhi Chen, Rui Zhang
2024 J jnl
IEEE Wirel. Commun.
Lingxiang Li, Wenrong Chen, Zhi Chen, Tianyu Hu, Weidong Mei, Boyu Ning
2024 B conf
GLOBECOM
Dong Wang, Weidong Mei, Boyu Ning, Zhi Chen
2024 conf
VTC Spring
Xin Wei, Weidong Mei, Zhi Chen
2024 J jnl
IEEE Wirel. Commun. Lett.
Huan Huang, Hongliang Zhang, Weidong Mei, Jun Li, Yi Cai, A. Lee Swindlehurst, Zhu Han
2024 J jnl
Proc. IEEE
Qingqing Wu, Beixiong Zheng, Changsheng You, Lipeng Zhu, Kaiming Shen, Xiaodan Shao, Weidong Mei, Boya Di, Hongliang Zhang, Ertugrul Basar, Lingyang Song, Marco Di Renzo, Zhi-Quan Luo, Rui Zhang
2024 B conf
GLOBECOM
Changhao Liu, Weidong Mei, Zhi Chen
2024 J jnl
IEEE Trans. Wirel. Commun.
Weidong Mei, Dong Wang, Zhi Chen, Rui Zhang
2024 J jnl
IEEE Wirel. Commun. Lett.
Xin Wei, Weidong Mei, Dong Wang, Boyu Ning, Zhi Chen
2024 conf
GLOBECOM (Workshops)
Qingliang Li, Weidong Mei, Boyu Ning, Rui Zhang
2024 J jnl
CoRR
Qingliang Li, Weidong Mei, Boyu Ning, Rui Zhang
2024 conf
GLOBECOM (Workshops)
Nianzu Li, Weidong Mei, Boyu Ning, Peiran Wu
2024 J jnl
CoRR
Nianzu Li, Weidong Mei, Boyu Ning, Peiran Wu
2024 J jnl
CoRR
Boyu Ning, Songjie Yang, Yafei Wu, Peilan Wang, Weidong Mei, Chau Yuen, Emil Björnson
2024 J jnl
CoRR
Xin Wei, Weidong Mei, Qingqing Wu, Boyu Ning, Zhi Chen
2024 B conf
GLOBECOM
Weidong Mei, Xin Wei, Yijie Liu, Boyu Ning, Zhi Chen
2024 J jnl
CoRR
Weidong Mei, Xin Wei, Yijie Liu, Boyu Ning, Zhi Chen
2024 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Xin Wei, Boyu Ning, Zhi Chen, Rui Zhang
2024 J jnl
CoRR
Weidong Mei, Xin Wei, Boyu Ning, Zhi Chen, Rui Zhang
2024 J jnl
IEEE Trans. Wirel. Commun.
Min Fu, Weidong Mei, Rui Zhang
2024 J jnl
CoRR
Shiyuan Sun, Fang Yang, Weidong Mei, Jian Song, Zhu Han, Rui Zhang
2024 J jnl
IEEE Trans. Wirel. Commun.
Shiyuan Sun, Weidong Mei, Fang Yang, Nan An, Jian Song, Rui Zhang
2024 conf
ICC
Dong Wang, Weidong Mei, Zhi Chen, Boyu Ning
2024 J jnl
CoRR
He Sun, Lipeng Zhu, Weidong Mei, Rui Zhang
2024 J jnl
IEEE Trans. Wirel. Commun.
He Sun, Lipeng Zhu, Weidong Mei, Rui Zhang
2024 J jnl
CoRR
He Sun, Lipeng Zhu, Weidong Mei, Rui Zhang
2024 B conf
GLOBECOM
Bonan An, Weidong Mei
2024 J jnl
CoRR
Honghao Wang, Qingqing Wu, Ying Gao, Wen Chen, Weidong Mei, Guojie Hu, Lexi Xu
2024 conf
GLOBECOM (Workshops)
Zi Zhang, Weidong Mei, Beixiong Zheng, Zhi Chen
2023 J jnl
IEEE Open J. Commun. Soc.
Boyu Ning, Zhongbao Tian, Weidong Mei, Zhi Chen, Chong Han, Shaoqian Li, Jinhong Yuan, Rui Zhang
2023 J jnl
IEEE Trans. Veh. Technol.
Xiaowei Pang, Weidong Mei, Nan Zhao, Rui Zhang
2023 J jnl
CoRR
Qingqing Wu, Beixiong Zheng, Changsheng You, Lipeng Zhu, Kaiming Shen, Xiaodan Shao, Weidong Mei, Boya Di, Hongliang Zhang, Ertugrul Basar, Lingyang Song, Marco Di Renzo, Zhi-Quan Luo, Rui Zhang
2023 J jnl
IEEE Trans. Wirel. Commun.
Weidong Mei, Rui Zhang
2023 J jnl
CoRR
Weidong Mei, Zhi Chen, Rui Zhang
2023 conf
ICC Workshops
Boyu Ning, Weidong Mei, Lipeng Zhu, Zhi Chen, Rui Zhang
2023 J jnl
CoRR
Min Fu, Weidong Mei, Rui Zhang
2023 J jnl
IEEE Commun. Lett.
Min Fu, Weidong Mei, Rui Zhang
2023 conf
ICC
Weidong Mei, Rui Zhang
2023 J jnl
CoRR
Min Fu, Weidong Mei, Rui Zhang
2023 J jnl
CoRR
Shiyuan Sun, Weidong Mei, Fang Yang, Nan An, Jian Song, Rui Zhang
2023 conf
ICC
Peilan Wang, Weidong Mei, Jun Fang, Rui Zhang
2023 J jnl
IEEE J. Sel. Areas Commun.
Peilan Wang, Weidong Mei, Jun Fang, Rui Zhang
2023 B conf
GLOBECOM
He Sun, Weidong Mei, Lipeng Zhu, Rui Zhang
2023 J jnl
CoRR
He Sun, Weidong Mei, Lipeng Zhu, Rui Zhang
2022 J jnl
IEEE Commun. Surv. Tutorials
Beixiong Zheng, Changsheng You, Weidong Mei, Rui Zhang
2022 J jnl
IEEE Trans. Commun.
Yuwei Huang, Weidong Mei, Rui Zhang
2022 J jnl
J. Commun. Inf. Networks
Changsheng You, Beixiong Zheng, Weidong Mei, Rui Zhang
2022 J jnl
IEEE Wirel. Commun. Lett.
Xiaowei Pang, Weidong Mei, Nan Zhao, Rui Zhang
2022 J jnl
IEEE Commun. Lett.
Weidong Mei, Rui Zhang
2022 J jnl
Proc. IEEE
Weidong Mei, Beixiong Zheng, Changsheng You, Rui Zhang
2022 J jnl
CoRR
Weidong Mei, Rui Zhang
2022 J jnl
IEEE Trans. Wirel. Commun.
Weidong Mei, Rui Zhang
2021 J jnl
CoRR
Beixiong Zheng, Changsheng You, Weidong Mei, Rui Zhang
2021 J jnl
CoRR
Weidong Mei, Rui Zhang
2021 J jnl
IEEE Wirel. Commun.
Weidong Mei, Rui Zhang
2021 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Rui Zhang
2021 conf
ICC
Weidong Mei, Rui Zhang
2021 J jnl
CoRR
Weidong Mei, Rui Zhang
2021 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Rui Zhang
2021 J jnl
CoRR
Yuwei Huang, Weidong Mei, Rui Zhang
2021 J jnl
CoRR
Weidong Mei, Beixiong Zheng, Changsheng You, Rui Zhang
2021 J jnl
CoRR
Weidong Mei, Rui Zhang
2021 J jnl
CoRR
Weidong Mei, Rui Zhang
2021 J jnl
IEEE Trans. Commun.
Weidong Mei, Rui Zhang
2020 J jnl
IEEE Wirel. Commun. Lett.
Xiaochen Lin, Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Xiaochen Lin, Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Weidong Mei, Rui Zhang
2020 J jnl
IEEE Trans. Commun.
Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Weidong Mei, Rui Zhang
2020 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Rui Zhang
2020 B conf
GLOBECOM
Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Weidong Mei, Rui Zhang
2020 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Rui Zhang
2020 J jnl
CoRR
Weidong Mei, Rui Zhang
2020 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Rui Zhang
2019 J jnl
IEEE Trans. Wirel. Commun.
Weidong Mei, Qingqing Wu, Rui Zhang
2019 J jnl
IEEE Wirel. Commun. Lett.
Boyu Ning, Zhi Chen, Xiaomei Wang, Weidong Mei
2019 J jnl
CoRR
Yuwei Huang, Weidong Mei, Jie Xu, Ling Qiu, Rui Zhang
2019 J jnl
IEEE Trans. Commun.
Yuwei Huang, Weidong Mei, Jie Xu, Ling Qiu, Rui Zhang
2019 J jnl
IEEE Syst. J.
Weidong Mei, Zhi Chen, Shaoqian Li
2019 B conf
GLOBECOM
Weidong Mei, Rui Zhang
2019 J jnl
CoRR
Weidong Mei, Rui Zhang
2019 J jnl
CoRR
Qingqing Wu, Weidong Mei, Rui Zhang
2019 J jnl
IEEE Wirel. Commun.
Qingqing Wu, Weidong Mei, Rui Zhang
2019 J jnl
IEEE J. Sel. Top. Signal Process.
Weidong Mei, Rui Zhang
2018 conf
VTC Spring
Shiyu Chen, Zhi Chen, Weidong Mei, Shaoqian Li
2018 B conf
GLOBECOM
Weidong Mei, Qingqing Wu, Rui Zhang
2018 J jnl
CoRR
Weidong Mei, Qingqing Wu, Rui Zhang
2018 J jnl
IEEE Access
Weidong Mei, Zhi Chen, Jun Fang, Shaoqian Li
2018 J jnl
IET Commun.
Shuai Huang, Weidong Mei, Shu Fang
2018 J jnl
CoRR
Weidong Mei, Rui Zhang
2017 J jnl
IEEE Commun. Lett.
Weidong Mei, Zhi Chen, Jun Fang
2017 J jnl
CoRR
Weidong Mei, Zhi Chen, Jun Fang, Shaoqian Li
2017 J jnl
EURASIP J. Wirel. Commun. Netw.
Weidong Mei, Zhi Chen, Jun Fang, Shaoqian Li
2017 Misc conf
ICASSP
Weidong Mei, Weiqing Kong, Zhi Chen, Jun Fang
2017 conf
GLOBECOM Workshops
Weidong Mei, Zhi Chen, Shaoqian Li
2017 J jnl
IEEE Wirel. Commun. Lett.
Weidong Mei, Zhi Chen, Jun Fang
2017 conf
SPAWC
Weidong Mei, Zhi Chen, Jun Fang, Boyu Ning
2017 J jnl
IEEE Wirel. Commun. Lett.
Qian Wang, Zhi Chen, Weidong Mei, Jun Fang
2017 J jnl
IEEE Trans. Veh. Technol.
Weidong Mei, Zhi Chen, Lingxiang Li, Jun Fang, Shaoqian Li
2017 conf
VTC Spring
Weidong Mei, Zhi Chen, Jun Fang
2017 B conf
GLOBECOM
Weidong Mei, Zhi Chen, Jun Fang
2017 J jnl
CoRR
Weidong Mei, Zhi Chen, Jun Fang, Shaoqian Li
2017 conf
VTC Spring
Weidong Mei, Zhi Chen, Jun Fang
2017 conf
ICC
Weidong Mei, Zhi Chen, Jun Fang, Bin Fu
2017 conf
ICC
Weidong Mei, Zhi Chen, Jun Fang
2017 conf
GlobalSIP
Shiyu Chen, Zhi Chen, Weidong Mei, Shaoqian Li
2016 conf
ICC Workshops
Weidong Mei, Bin Fu, Lingxiang Li, Zhi Chen, Chuan Huang
2016 conf
ICC
Weidong Mei, Lingxiang Li, Zhi Chen, Chuan Huang
2016 B conf
PIMRC
Weidong Mei, Lingxiang Li, Zhi Chen, Chuan Huang
2016 J jnl
CoRR
Weidong Mei, Zhi Chen, Jun Fang
2016 J jnl
IEEE Signal Process. Lett.
Weidong Mei, Zhi Chen, Jun Fang
2016 J jnl
CoRR
Weidong Mei, Zhi Chen, Lingxiang Li, Jun Fang, Shaoqian Li
2016 Misc conf
ICASSP
Weidong Mei, Zhi Chen, Chuan Huang
2016 conf
GlobalSIP
Weidong Mei, Zhi Chen, Jun Fang
2016 J jnl
IEEE Signal Process. Lett.
Weidong Mei, Zhi Chen, Jun Fang
2016 J jnl
CoRR
Duo Zhang, Weidong Mei, Lingxiang Li, Zhi Chen
2015 conf
GlobalSIP
Weidong Mei, Lingxiang Li, Zhi Chen, Chuan Huang
2015 conf
VTC Spring
Duo Zhang, Weidong Mei, Lingxiang Li, Zhi Chen
tests/unit/test_apk_cfg_features.py
← Index tests/unit/test_apk_cfg_features.py python
"""
Unit tests for APK CFG feature parity with the Binary Ninja pipeline.

Tests advanced CFG features computed from smali (topology hash, MD-index,
WL-MinHash, prime product, packed adjacency, block features export) and
the slimmed similarity table.

All tests use mocked smali input — no JADX/apktool/Java required.
"""
import pytest

from redb.extractors.decompiler.apk.smali_cfg import (
    SmaliCFGMetrics,
    compute_cfg_metrics,
)
from redb.extractors.decompiler.apk.method_extractor import (
    SMALI_OP_PRIMES,
    compute_prime_product_smali,
    count_call_instructions,
)

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


# ===================================================================
# Sample smali bodies for testing
# ===================================================================

# Simple linear method: 3 instructions, 1 block
SMALI_LINEAR = """\
    const/4 v0, 0x0
    invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
    return-void
"""

# Diamond CFG: if-else with two paths merging
SMALI_DIAMOND = """\
    const/4 v0, 0x1
    if-eqz v0, :cond_0
    invoke-virtual {p0}, Lcom/Foo;->pathA()V
    goto :goto_0
    :cond_0
    invoke-virtual {p0}, Lcom/Foo;->pathB()V
    :goto_0
    return-void
"""

# Loop: a back edge from goto to a label before it
SMALI_LOOP = """\
    const/4 v0, 0x0
    :loop_start
    add-int/lit8 v0, v0, 0x1
    if-lt v0, v1, :loop_start
    return-void
"""

# Multi-block with several invoke calls
SMALI_MULTI_CALL = """\
    invoke-virtual {p0}, Lcom/Foo;->a()V
    invoke-static {v0}, Lcom/Bar;->b(I)V
    invoke-direct {p0, v1}, Lcom/Baz;-><init>(I)V
    const/4 v0, 0x0
    return-void
"""


# ===================================================================
# TestSmaliCFGMetricsAdvanced — new fields in SmaliCFGMetrics
# ===================================================================

class TestSmaliCFGMetricsAdvanced:
    """Test that advanced CFG fields are populated by compute_cfg_metrics."""

    def test_topology_hash_is_bytes(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert isinstance(m.cfg_topology_hash, bytes)
        assert len(m.cfg_topology_hash) == 16

    def test_topology_hash_nonzero_for_multiblock(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert m.cfg_topology_hash != b'\x00' * 16

    def test_topology_hash_zero_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.cfg_topology_hash == b'\x00' * 16

    def test_identical_cfg_same_topology_hash(self):
        """Two smali methods with the same CFG structure produce the same hash."""
        smali_a = """\
    const/4 v0, 0x1
    if-eqz v0, :cond_0
    const/4 v1, 0x2
    goto :goto_0
    :cond_0
    const/4 v1, 0x3
    :goto_0
    return-void
"""
        smali_b = """\
    const/4 v5, 0x9
    if-nez v5, :cond_0
    add-int v6, v5, v5
    goto :goto_0
    :cond_0
    sub-int v6, v5, v5
    :goto_0
    return-void
"""
        m_a = compute_cfg_metrics(smali_a)
        m_b = compute_cfg_metrics(smali_b)
        assert m_a.cfg_topology_hash == m_b.cfg_topology_hash

    def test_different_cfg_different_topology_hash(self):
        m_linear = compute_cfg_metrics(SMALI_LINEAR)
        m_diamond = compute_cfg_metrics(SMALI_DIAMOND)
        assert m_linear.cfg_topology_hash != m_diamond.cfg_topology_hash

    def test_md_index_topdown_nonzero(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert m.md_index_topdown != 0

    def test_md_index_bottomup_nonzero(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert m.md_index_bottomup != 0

    def test_md_index_zero_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.md_index_topdown == 0
        assert m.md_index_bottomup == 0

    def test_wl_minhash_length(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert len(m.wl_minhash) == 128

    def test_wl_minhash_sentinel_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.wl_minhash == [255] * 128

    def test_wl_minhash_values_are_uint8(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        for val in m.wl_minhash:
            assert 0 <= val <= 255

    def test_cfg_adjacency_nonempty_for_multiblock(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert len(m.cfg_adjacency) > 0

    def test_cfg_adjacency_empty_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.cfg_adjacency == []

    def test_cfg_adjacency_packed_format(self):
        """Each entry should be (src << 16) | tgt."""
        m = compute_cfg_metrics(SMALI_DIAMOND)
        for edge in m.cfg_adjacency:
            assert isinstance(edge, int)
            src = edge >> 16
            tgt = edge & 0xFFFF
            assert src < m.block_count
            assert tgt < m.block_count

    def test_block_features_exported(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert len(m.block_features) == m.block_count
        for bf in m.block_features:
            assert len(bf) == 8  # 7 categories + successor_count

    def test_cfg_feature_tlsh_none_for_small(self):
        """Small methods produce None (< 50 bytes of feature data)."""
        m = compute_cfg_metrics(SMALI_LINEAR)
        # Single-block linear method — too small for TLSH
        assert m.cfg_feature_tlsh is None

    def test_loop_count_with_back_edge(self):
        m = compute_cfg_metrics(SMALI_LOOP)
        assert m.loop_count >= 1


# ===================================================================
# TestPrimeProductSmali
# ===================================================================

class TestPrimeProductSmali:

    def test_empty_returns_zero(self):
        assert compute_prime_product_smali("") == 0

    def test_none_returns_zero(self):
        assert compute_prime_product_smali(None) == 0

    def test_known_computation(self):
        """Single invoke instruction → CALL category → prime 17."""
        smali = "    invoke-virtual {p0}, Lcom/Foo;->bar()V"
        assert compute_prime_product_smali(smali) == 17

    def test_two_instructions(self):
        """const (CONST→2) * invoke (CALL→17) = 34."""
        smali = """\
    const/4 v0, 0x0
    invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
"""
        assert compute_prime_product_smali(smali) == 2 * 17

    def test_skips_directives_and_labels(self):
        """Directives, labels, and comments should be skipped."""
        smali = """\
.registers 2
.line 10
    :label
    # comment
    const/4 v0, 0x0
"""
        # Only const/4 → CONST → prime 2
        assert compute_prime_product_smali(smali) == 2

    def test_position_independent(self):
        """Reordering instructions produces the same product (multiplication is commutative)."""
        smali_a = """\
    add-int v0, v1, v2
    invoke-virtual {p0}, Lcom/Foo;->bar()V
"""
        smali_b = """\
    invoke-virtual {p0}, Lcom/Foo;->bar()V
    add-int v0, v1, v2
"""
        assert compute_prime_product_smali(smali_a) == compute_prime_product_smali(smali_b)

    def test_all_categories_have_primes(self):
        """Every category in SMALI_OP_PRIMES is a positive integer."""
        for cat, prime in SMALI_OP_PRIMES.items():
            assert isinstance(prime, int)
            assert prime >= 1

    def test_mod_2_64(self):
        """Result should be mod 2^64 (doesn't overflow)."""
        # A very long method — product stays within uint64
        smali = "\n".join(["    mul-int v0, v1, v2"] * 1000)
        result = compute_prime_product_smali(smali)
        assert 0 <= result < 2**64


# ===================================================================
# TestCallCount
# ===================================================================

class TestCallCount:

    def test_empty(self):
        assert count_call_instructions("") == 0

    def test_none(self):
        assert count_call_instructions(None) == 0

    def test_single_invoke(self):
        smali = "    invoke-virtual {p0}, Lcom/Foo;->bar()V"
        assert count_call_instructions(smali) == 1

    def test_multiple_invoke_types(self):
        assert count_call_instructions(SMALI_MULTI_CALL) == 3

    def test_non_invoke_not_counted(self):
        smali = """\
    const/4 v0, 0x0
    add-int v1, v0, v0
    return-void
"""
        assert count_call_instructions(smali) == 0


# ===================================================================
# TestSimilarityTableSlimmed
# ===================================================================

class TestSimilarityTableSlimmed:
    """Verify the similarity table no longer contains moved fields."""

    def test_export_similarity_no_block_count(self):
        """block_count should not be in similarity export columns."""
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        from unittest.mock import MagicMock

        extractor = DecompileAPK.__new__(DecompileAPK)
        extractor.log = MagicMock()
        extractor.sha256 = "a" * 64
        extractor.sha1 = "b" * 40
        extractor.md5 = "c" * 32
        extractor.analysis_results = {
            "sha256": "a" * 64,
            "sha1": "b" * 40,
            "md5": "c" * 32,
            "similarity_metrics": [{
                "smali_method_hash": "d" * 64,
                "cyclomatic_complexity": 3,
                "ssdeep_smali": None,
                "tlsh_smali": None,
                "minhash": [1, 2, 3],
            }],
        }

        export = extractor.prepare_export_data("ClickHouseExporter")
        sim_cols = export["method_similarity_metrics"]["column_names"]
        assert "block_count" not in sim_cols
        assert "edge_count" not in sim_cols
        assert "loop_count" not in sim_cols
        assert "max_depth" not in sim_cols
        assert "max_fan_out" not in sim_cols
        # These should still be there
        assert "smali_method_hash" in sim_cols
        assert "ssdeep_smali" in sim_cols
        assert "minhash" in sim_cols
        # cyclomatic_complexity moved to cfg table
        assert "cyclomatic_complexity" not in sim_cols


# ===================================================================
# TestCFGTableExport
# ===================================================================

class TestCFGTableExport:
    """Verify the new CFG table is exported correctly."""

    def test_export_cfg_table_present(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        from unittest.mock import MagicMock

        extractor = DecompileAPK.__new__(DecompileAPK)
        extractor.log = MagicMock()
        extractor.analysis_results = {
            "sha256": "a" * 64,
            "sha1": "b" * 40,
            "md5": "c" * 32,
            "cfg": [{
                "smali_method_hash": "d" * 64,
                "cfg_topology_hash": b'\x01' * 16,
                "block_count": 4,
                "edge_count": 5,
                "instructions_count": 20,
                "call_count": 3,
                "cyclomatic_complexity": 3,
                "loop_count": 1,
                "max_depth": 2,
                "max_fan_out": 2,
                "md_index_topdown": 12345,
                "md_index_bottomup": 67890,
                "prime_product_smali": 999,
                "cfg_feature_tlsh": None,
                "wl_minhash": [0] * 128,
                "bb_features": [[10, 1, 0, 2, 1, 0, 0, 2]] * 4,
                "cfg_adjacency": [0x00010000, 0x00010002],
            }],
        }

        export = extractor.prepare_export_data("ClickHouseExporter")
        assert "cfg_methods" in export
        cfg_export = export["cfg_methods"]
        assert cfg_export["table"] == "code_apk_cfg_methods"
        assert len(cfg_export["data"]) == 1
        assert "cfg_topology_hash" in cfg_export["column_names"]
        assert "prime_product_smali" in cfg_export["column_names"]
        assert "wl_minhash" in cfg_export["column_names"]
        assert "bb_features" in cfg_export["column_names"]
        assert "cfg_adjacency" in cfg_export["column_names"]
        # Verify column count matches data width
        assert len(cfg_export["column_names"]) == len(cfg_export["data"][0])
        assert len(cfg_export["column_type_names"]) == len(cfg_export["data"][0])