Xiaodong Lin

380 papers A* 24A 4B 47C 22Misc 4Journal 202Unranked 72
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Knowl. Data Eng.
Xiaoguang Li, Yuxin Wen, Yuchen Wang, Haonan Yan, Yahong Chen, Zhe Sun, Hui Li, Xiaodong Lin
2026 J jnl
Knowl. Based Syst.
Sonal Allana, Rozita Dara, Xiaodong Lin, Pulei Xiong
2025 C conf
PST
Le Wang, Sonal Allana, Xiaowei Sun, Liang Xue, Xiaodong Lin, Rozita Dara, Pulei Xiong
2025 J jnl
IEEE Trans. Dependable Secur. Comput.
Haonan Yan, Chengbo Zheng, Qian Chen, Xiaoguang Li, Bin Wang, Hui Li, Xiaodong Lin
2025 J jnl
IEEE Trans. Dependable Secur. Comput.
Juan Hu, Jinwen Liang, Zheng Qin, Xin Liao, Wenbo Zhou, Xiaodong Lin
2025 J jnl
IEEE Trans. Dependable Secur. Comput.
Meng Li, Yifei Chen, Jianbo Gao, Jingyu Wu, Zijian Zhang, Jialing He, Liehuang Zhu, Mauro Conti, Xiaodong Lin
2025 J jnl
Proc. ACM Softw. Eng.
Shuwei Song, Ting Chen, Ao Qiao, Xiapu Luo, Leqing Wang, Zheyuan He, Ting Wang, Xiaodong Lin, Peng He, Wensheng Zhang, Xiaosong Zhang
2025 J jnl
IEEE Trans. Serv. Comput.
Qian Chen, Zilong Wang, Mengqing Yan, Haonan Yan, Xiaodong Lin, Jianying Zhou
2025 J jnl
ACM Comput. Surv.
Tianyi Wang, Xin Liao, Kam-Pui Chow, Xiaodong Lin, Yinglong Wang
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Yating Li, Le Wang, Liang Xue, Jingwei Liu, Xiaodong Lin
2025 J jnl
IEEE Trans. Mob. Comput.
Juncheng Jia, Weipeng Zhu, Bing Luo, Xiaodong Lin, Liuchen Ma
2025 conf
ICC
Yating Li, Le Wang, Liang Xue, Jingwei Liu, Rong Sun, Xiaodong Lin
2025 J jnl
IEEE Trans. Veh. Technol.
Yating Li, Liang Xue, Le Wang, Jingwei Liu, Xiaodong Lin
2025 J jnl
CoRR
Sonal Allana, Rozita Dara, Xiaodong Lin, Pulei Xiong
2024 A* conf
SP
Peng Cheng, Yuwei Wang, Peng Huang, Zhongjie Ba, Xiaodong Lin, Feng Lin, Li Lu, Kui Ren
2024 J jnl
CoRR
Peng Cheng, Yuwei Wang, Peng Huang, Zhongjie Ba, Xiaodong Lin, Feng Lin, Li Lu, Kui Ren
2024 J jnl
IEEE Trans. Dependable Secur. Comput.
Haonan Yan, Xiaoguang Li, Wenjing Zhang, Rui Wang, Hui Li, Xingwen Zhao, Fenghua Li, Xiaodong Lin
2024 J jnl
IEEE Trans. Dependable Secur. Comput.
Haonan Yan, Xiaoguang Li, Wenjing Zhang, Qian Chen, Bin Wang, Hui Li, Xiaodong Lin
2024 J jnl
IEEE Trans. Serv. Comput.
Xuefeng Liu, Zhe Feng, Le Wang, Wenhai Sun, Qingqi Pei, Xiaodong Lin, Huizhong Li
2024 B conf
AFT
Rundong Gan, Liyi Zhou, Le Wang, Kaihua Qin, Xiaodong Lin
2024 J jnl
IEEE Trans. Inf. Forensics Secur.
Meng Li, Hanni Ding, Qing Wang, Mingwei Zhang, Weizhi Meng, Liehuang Zhu, Zijian Zhang, Xiaodong Lin
2024 J jnl
IEEE Trans. Artif. Intell.
Xiuhua Wang, Shuai Wang, Yiwei Li, Fengrui Fan, Shikang Li, Xiaodong Lin
2024 J jnl
ACM Trans. Internet Techn.
Rundong Gan, Le Wang, Liang Xue, Xiaodong Lin
2024 A* conf
WWW
Qian Chen, Zilong Wang, Jiaqi Hu, Haonan Yan, Jianying Zhou, Xiaodong Lin
2024 J jnl
IEEE Trans. Inf. Forensics Secur.
Jing Lei, Le Wang, Qingqi Pei, Wenhai Sun, Xiaodong Lin, Xuefeng Liu
2024 C conf
PST
Qi Li, Xiaodong Lin
2024 J jnl
IEEE Internet Things J.
Qian Chen, Zheng Chai, Zilong Wang, Haonan Yan, Xiaodong Lin, Jianying Zhou
2024 J jnl
IEEE Internet Things J.
Liang Xue, Rundong Gan, Xiaodong Lin
2024 J jnl
Digit. Commun. Networks
Jianyi Zhang, Fangjiao Zhang, Qichao Jin, Zhiqiang Wang, Xiaodong Lin, Xiali Hei
2023 conf
EISA
Izabela Savic, Haonan Yan, Xiaodong Lin, Daniel Gillis
2023 J jnl
IEEE Trans. Computers
Liang Xue, Jianbing Ni, Dongxiao Liu, Xiaodong Lin, Xuemin Shen
2023 J jnl
IEEE Internet Things J.
Meng Shen, Aijing Gu, Jiawen Kang, Xiangyun Tang, Xiaodong Lin, Liehuang Zhu, Dusit Niyato
2023 A* conf
CVPR
Ziyao Guo, Haonan Yan, Hui Li, Xiaodong Lin
2023 J jnl
CoRR
Ziyao Guo, Haonan Yan, Hui Li, Xiaodong Lin
2023 J jnl
IEEE Trans. Parallel Distributed Syst.
Qian Chen, Zilong Wang, Jiawei Chen, Haonan Yan, Xiaodong Lin
2023 J jnl
CoRR
Meng Li, Mingwei Zhang, Qing Wang, Hanni Ding, Weizhi Meng, Liehuang Zhu, Zijian Zhang, Xiaodong Lin
2023 J jnl
IEEE Trans. Mob. Comput.
Jianbing Ni, Man Ho Au, Wei Wu, Xiapu Luo, Xiaodong Lin, Xuemin Sherman Shen
2023 J jnl
IEEE Trans. Dependable Secur. Comput.
Liang Xue, Dongxiao Liu, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2023 J jnl
IEEE Trans. Inf. Forensics Secur.
Qian Chen, Zilong Wang, Hongbo Wang, Xiaodong Lin
2023 J jnl
CoRR
Qian Chen, Zilong Wang, Jiaqi Hu, Haonan Yan, Jianying Zhou, Xiaodong Lin
2023 J jnl
Comput. Secur.
Qian Chen, Zilong Wang, Wenjing Zhang, Xiaodong Lin
2023 J jnl
IEEE Trans. Netw. Sci. Eng.
Guangyu Peng, Aiqing Zhang, Xiaodong Lin
2023 conf
AIS&P (1)
Liang Xue, Xiaodong Lin, Pulei Xiong
2023 conf
AIS&P (1)
Le Wang, Haonan Yan, Xiaodong Lin, Pulei Xiong
2023 A* conf
NeurIPS
Haonan Yan, Wenjing Zhang, Qian Chen, Xiaoguang Li, Wenhai Sun, Hui Li, Xiaodong Lin
2023 J jnl
CoRR
Haonan Yan, Wenjing Zhang, Qian Chen, Xiaoguang Li, Wenhai Sun, Hui Li, Xiaodong Lin
2023 J jnl
Comput. Networks
Mohammad Amiri-Zarandi, Rozita A. Dara, Xiaodong Lin
2023 J jnl
ACM Trans. Softw. Eng. Methodol.
Zheyuan He, Shuwei Song, Yang Bai, Xiapu Luo, Ting Chen, Wensheng Zhang, Peng He, Hongwei Li, Xiaodong Lin, Xiaosong Zhang
2023 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2023 conf
DeFi@CCS
Rundong Gan, Le Wang, Xiaodong Lin
2023 J jnl
CoRR
Rundong Gan, Le Wang, Xiaodong Lin
2022 conf
ICC
Jixin Zhang, Ke Cheng, Giuliano Sovernigo, Xiaodong Lin
2022 A* conf
IJCAI
Haonan Yan, Xiaoguang Li, Ziyao Guo, Hui Li, Fenghua Li, Xiaodong Lin
2022 J jnl
Digit. Investig.
Qi Li, Giuliano Sovernigo, Xiaodong Lin
2022 J jnl
IEEE Trans. Computers
Dongxiao Liu, Cheng Huang, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2022 B conf
ICPADS
Sandro Amofa, Xiaodong Lin, Qi Xia, Hu Xia, Jianbin Gao
2022 C conf
ISC
Qian Chen, Zilong Wang, Yilin Zhou, Jiawei Chen, Dan Xiao, Xiaodong Lin
2022 J jnl
IEEE Internet Things J.
Kai Yang, Yueyang Zhang, Xiaodong Lin, Zhi Li, Limin Sun
2022 J jnl
IEEE Internet Things J.
Jiezhen Tang, Hui Zhu, Rongxing Lu, Xiaodong Lin, Hui Li, Fengwei Wang
2022 J jnl
IEEE Trans. Cloud Comput.
Guowen Xu, Hongwei Li, Hao Ren, Xiaodong Lin, Xuemin Shen
2022 J jnl
CoRR
Qian Chen, Zilong Wang, Jiawei Chen, Haonan Yan, Xiaodong Lin
2022 J jnl
IEEE Trans. Dependable Secur. Comput.
Jia-Nan Liu, Xizhao Luo, Jian Weng, Anjia Yang, Xu An Wang, Ming Li, Xiaodong Lin
2022 J jnl
Comput. Secur.
Helin Li, Hui Zhu, Xiaodong Lin, Rongxing Lu, Zhipeng Yu, Wei Lan
2022 J jnl
IEEE Trans. Commun.
Jie Feng, Wenjing Zhang, Qingqi Pei, Jinsong Wu, Xiaodong Lin
2022 B conf
TrustCom
Qian Chen, Hongbo Wang, Zilong Wang, Jiawei Chen, Haonan Yan, Xiaodong Lin
2022 J jnl
IEEE Trans. Inf. Forensics Secur.
Wenjing Zhang, Bo Jiang, Ming Li, Xiaodong Lin
2022 J jnl
IEEE Internet Things J.
Fuyuan Song, Zheng Qin, Liang Xue, Jixin Zhang, Xiaodong Lin, Xuemin Shen
2022 conf
MSN
Qian Chen, Zheng Chai, Zilong Wang, Jiawei Chen, Haonan Yan, Xiaodong Lin
2022 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2022 J jnl
IEEE Trans. Dependable Secur. Comput.
Junjiao Liu, Xiaodong Lin, Xin Chen, Hui Wen, Hong Li, Yan Hu, Jiawei Sun, Zhiqiang Shi, Limin Sun
2022 J jnl
IEEE Internet Things J.
Ming Li, Jian Weng, Jia-Nan Liu, Xiaodong Lin, Charlie Obimbo
2022 B conf
AFT
Rundong Gan, Le Wang, Xiangyu Ruan, Xiaodong Lin
2022 J jnl
CoRR
Jianyi Zhang, Fangjiao Zhang, Qichao Jin, Zhiqiang Wang, Xiaodong Lin, Xiali Hei
2021 J jnl
IEEE Internet Things J.
Hamed HaddadPajouh, Alireza Mohtadi, Ali Dehghantanha, Hadis Karimipour, Xiaodong Lin, Kim-Kwang Raymond Choo
2021 J jnl
Patterns
Bin Hu, Zongyang Zhang, Jianwei Liu, Yizhong Liu, Jiayuan Yin, Rongxing Lu, Xiaodong Lin
2021 conf
ICC
Fuyuan Song, Zheng Qin, Jinwen Liang, Xiaodong Lin
2021 J jnl
IEEE Internet Things J.
Aiqing Zhang, Peiyun Zhang, Huaqun Wang, Xiaodong Lin
2021 J jnl
IEEE Trans. Cloud Comput.
Yuan Zhang, Chunxiang Xu, Xiaodong Lin, Xuemin Shen
2021 J jnl
IEEE Trans. Netw. Sci. Eng.
Dongxiao Liu, Cheng Huang, Jianbing Ni, Xiaodong Lin, Xuemin Shen
2021 J jnl
IEEE Trans. Veh. Technol.
Wei Wang, Nan Cheng, Yiliang Liu, Haibo Zhou, Xiaodong Lin, Xuemin Shen
2021 J jnl
IEEE Internet Things J.
Jinwen Liang, Zheng Qin, Liang Xue, Xiaodong Lin, Xuemin Shen
2021 J jnl
IEEE Internet Things J.
Qi Li, Xiaodong Lin
2021 J jnl
IEEE Trans. Dependable Secur. Comput.
Jinwen Liang, Zheng Qin, Sheng Xiao, Lu Ou, Xiaodong Lin
2021 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2021 J jnl
CoRR
Qian Chen, Zilong Wang, Xiaodong Lin
2021 J jnl
IEEE Trans. Computers
Jinwen Liang, Zheng Qin, Jianbing Ni, Xiaodong Lin, Xuemin Shen
2021 J jnl
IEEE Trans. Veh. Technol.
Mohamed Baza, Ahmed B. T. Sherif, Mohamed M. E. A. Mahmoud, Spiridon Bakiras, Waleed Alasmary, Mohamed M. Abdallah, Xiaodong Lin
2021 J jnl
IEEE Trans. Veh. Technol.
Fuyuan Song, Zheng Qin, Dongxiao Liu, Jixin Zhang, Xiaodong Lin, Xuemin Shen
2021 J jnl
IEEE Trans. Serv. Comput.
Meng Li, Liehuang Zhu, Xiaodong Lin
2021 C conf
PST
Fuyuan Song, Zheng Qin, Jinwen Liang, Pulei Xiong, Xiaodong Lin
2021 A* conf
CCS
Suibin Sun, Le Yu, Xiaokuan Zhang, Minhui Xue, Ren Zhou, Haojin Zhu, Shuang Hao, Xiaodong Lin
2021 J jnl
IEEE Internet Things J.
Jinwen Liang, Zheng Qin, Liang Xue, Xiaodong Lin, Xuemin Shen
2021 C conf
ISC
Panpan Lu, Qi Li, Hui Zhu, Giuliano Sovernigo, Xiaodong Lin
2020 J jnl
CoRR
Bin Hu, Zongyang Zhang, Jianwei Liu, Yizhong Liu, Jiayuan Yin, Rongxing Lu, Xiaodong Lin
2020 B conf
ICPADS
Guowen Xu, Hongwei Li, Yuan Zhang, Xiaodong Lin, Robert H. Deng, Xuemin Shen
2020 J jnl
IEEE Wirel. Commun.
Xiaodong Lin, Mohsen Guizani, Xiaojiang Du, Cheng-Kang Chu, Yong Yu
2020 J jnl
IACR Cryptol. ePrint Arch.
Ming Li, Jian Weng, Jia-Nan Liu, Xiaodong Lin, Charlie Obimbo
2020 J jnl
IEEE Trans. Ind. Informatics
Liang Xue, Dongxiao Liu, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2020 conf
ICC
Liang Xue, Dongxiao Liu, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2020 J jnl
IEEE Trans. Smart Grid
Jia-Nan Liu, Jian Weng, Anjia Yang, Yizhao Chen, Xiaodong Lin
2020 J jnl
IEEE Trans. Mob. Comput.
Jianbing Ni, Kuan Zhang, Qi Xia, Xiaodong Lin, Xuemin Sherman Shen
2020 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2020 J jnl
IEEE Trans. Dependable Secur. Comput.
Zishan Liu, Zhenyu Liu, Lin Zhang, Xiaodong Lin
2020 Misc conf
ICNC
Youquan Lin, Bin Cao, Xiaodong Lin, Qinyu Zhang
2020 J jnl
IEEE Trans. Dependable Secur. Comput.
Jianbing Ni, Kuan Zhang, Yong Yu, Xiaodong Lin, Xuemin Sherman Shen
2020 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2020 conf
ICC
Lingling Wang, Xiaodong Lin, Lijun Qu, Chunguang Ma
2020 A* conf
NDSS
Ting Chen, Rong Cao, Ting Li, Xiapu Luo, Guofei Gu, Yufei Zhang, Zhou Liao, Hang Zhu, Gang Chen, Zheyuan He, Yuxing Tang, Xiaodong Lin, Xiaosong Zhang
2020 J jnl
IEEE Internet Things J.
Dongxiao Liu, Jianbing Ni, Cheng Huang, Xiaodong Lin, Xuemin Sherman Shen
2020 J jnl
J. Commun. Inf. Networks
Liang Xue, Dongxiao Liu, Cheng Huang, Xiaodong Lin, Xuemin Sherman Shen
2020 J jnl
Proc. IEEE
Kui Ren, Qian Wang, Cong Wang, Zhan Qin, Xiaodong Lin
2020 J jnl
IEEE Trans. Veh. Technol.
Lingling Wang, Xiaodong Lin, Eugene V. Zima, Chunguang Ma
2020 J jnl
IEEE Trans. Veh. Technol.
Dongxiao Liu, Jianbing Ni, Xiaodong Lin, Xuemin Shen
2020 J jnl
ACM Trans. Internet Techn.
Ting Chen, Zihao Li, Yuxiao Zhu, Jiachi Chen, Xiapu Luo, John Chi-Shing Lui, Xiaodong Lin, Xiaosong Zhang
2020 J jnl
IEEE Trans. Inf. Forensics Secur.
Guowen Xu, Hongwei Li, Sen Liu, Kan Yang, Xiaodong Lin
2020 J jnl
IEEE J. Sel. Areas Commun.
Kai Yang, Qiang Li, Xiaodong Lin, Xin Chen, Limin Sun
2019 conf
ICC
Wei Wang, Zhisheng Yin, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2019 conf
DSC
Jixin Zhang, Mohammad Faham Khan, Xiaodong Lin, Zheng Qin
2019 J jnl
IEEE Trans. Ind. Informatics
Dongxiao Liu, Amal Alahmadi, Jianbing Ni, Xiaodong Lin, Xuemin Shen
2019 J jnl
IEEE Trans. Smart Grid
Jianbing Ni, Kuan Zhang, Xiaodong Lin, Xuemin Sherman Shen
2019 conf
SecureComm (2)
Meng Li, Liehuang Zhu, Xiaodong Lin
2019 J jnl
IEEE Trans. Veh. Technol.
Anjia Yang, Jian Weng, Nan Cheng, Jianbing Ni, Xiaodong Lin, Xuemin Shen
2019 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2019 J jnl
IEEE Internet Things J.
Meng Li, Liehuang Zhu, Xiaodong Lin
2019 conf
ICC
Jinwen Liang, Zheng Qin, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2019 J jnl
IEEE Trans. Inf. Forensics Secur.
Guowen Xu, Hongwei Li, Yuanshun Dai, Kan Yang, Xiaodong Lin
2019 C conf
PST
Liang Xue, Jianbing Ni, Cheng Huang, Xiaodong Lin, Xuemin Sherman Shen
2019 J jnl
IEEE Trans. Veh. Technol.
Wei Wang, Nan Cheng, Kah Chan Teh, Xiaodong Lin, Weihua Zhuang, Xuemin Shen
2019 J jnl
Future Gener. Comput. Syst.
Wenbo Jiang, Hongwei Li, Guowen Xu, Mi Wen, Guishan Dong, Xiaodong Lin
2019 J jnl
IEEE Trans. Veh. Technol.
Ming Li, Jian Weng, Anjia Yang, Jia-Nan Liu, Xiaodong Lin
2019 J jnl
IEEE Netw.
Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2019 J jnl
IEEE Trans. Veh. Technol.
Jianbing Ni, Xiaodong Lin, Xuemin Shen
2019 J jnl
CoRR
Jianbing Ni, Xiaodong Lin, Xuemin Shen
2019 conf
ICC
Dongxiao Liu, Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2019 conf
ICC
Amal Alahmadi, Xiaodong Lin
2019 J jnl
CoRR
Lingchen Zhao, Qian Wang, Cong Wang, Qi Li, Chao Shen, Xiaodong Lin, Shengshan Hu, Minxin Du
2018 conf
iThings/GreenCom/CPSCom/SmartData
Abdulrahman Alamer, Sultan Basudan, Xiaodong Lin
2018 B conf
GLOBECOM
Wenbo Jiang, Hongwei Li, Guowen Xu, Mi Wen, Guishan Dong, Xiaodong Lin
2018 J jnl
Internet Technol. Lett.
Dongxiao Liu, Jianbing Ni, Xiaodong Lin, Xuemin (Sherman) Shen
2018 J jnl
Digit. Investig.
Xiaodong Lin, Ting Chen, Tong Zhu, Kun Yang, Fengguo Wei
2018 C conf
ICICS
Yuan Zhang, Xiaodong Lin, Chunxiang Xu
2018 J jnl
IEEE Netw.
Abdulrahman Alamer, Yong Deng, Guiyi Wei, Xiaodong Lin
2018 conf
ICC
Guowen Xu, Hongwei Li, Yuanshun Dai, Jian Bai, Xiaodong Lin
2018 conf
iThings/GreenCom/CPSCom/SmartData
Sultan Basudan, Abdulrahman Alamer, Xiaodong Lin, Karthik Sankaranarayanan
2018 B conf
MASS
Dongxiao Liu, Jianbing Ni, Hongwei Li, Xiaodong Lin, Xuemin Shen
2018 J jnl
IEEE J. Sel. Areas Commun.
Jianbing Ni, Xiaodong Lin, Xuemin Sherman Shen
2018 conf
WASA
Hongwei Li, Guowen Xu, Qiang Tang, Xiaodong Lin, Xuemin (Sherman) Shen
2018 J jnl
CoRR
Jianbing Ni, Kuan Zhang, Qi Xia, Xiaodong Lin, Xuemin Shen
2018 J jnl
IEEE Trans. Ind. Informatics
Yuan Zhang, Chunxiang Xu, Hongwei Li, Kan Yang, Jianying Zhou, Xiaodong Lin
2018 book
Xiaodong Lin
2018 book
Xiaodong Lin, Jianbing Ni, Xuemin (Sherman) Shen
2018 J jnl
IEEE Trans. Veh. Technol.
Jianbing Ni, Kuan Zhang, Yong Yu, Xiaodong Lin, Xuemin Shen
2018 J jnl
IEEE Netw.
Hao Ren, Hongwei Li, Yuanshun Dai, Kan Yang, Xiaodong Lin
2018 J jnl
IEEE Trans. Veh. Technol.
Cheng Huang, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2018 J jnl
IEEE Commun. Surv. Tutorials
Jianbing Ni, Kuan Zhang, Xiaodong Lin, Xuemin Sherman Shen
2018 C ed.
SecureComm
Xiaodong Lin, Ali A. Ghorbani, Kui Ren, Sencun Zhu, Aiqing Zhang
2018 ed.
ATCS/SePrIoT@SecureComm
Xiaodong Lin, Ali A. Ghorbani, Kui Ren, Sencun Zhu, Aiqing Zhang
2018 J jnl
J. Medical Syst.
Aiqing Zhang, Xiaodong Lin
2018 A* conf
INFOCOM
Ting Chen, Yuxiao Zhu, Zihao Li, Jiachi Chen, Xiaoqi Li, Xiapu Luo, Xiaodong Lin, Xiaosong Zhang
2018 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2018 J jnl
IEEE Commun. Stand. Mag.
Anwer Al-Dulaimi, Xiaodong Lin
2017 J jnl
IEEE Internet Things J.
Khalid Nawaf Alharbi, Xiaodong Lin, Jun Shao
2017 J jnl
IEEE Internet Things J.
Sultan Basudan, Xiaodong Lin, Karthik Sankaranarayanan
2017 conf
ICC
Abdulrahman Alamer, Yong Deng, Xiaodong Lin
2017 B conf
GLOBECOM
Sultan Basudan, Xiaodong Lin, Karthik Sankaranarayanan
2017 conf
ACM TUR-C
Nathan Scrivens, Xiaodong Lin
2017 A conf
SANER
Ting Chen, Youzheng Feng, Xiapu Luo, Xiaodong Lin, Xiaosong Zhang
2017 J jnl
IEEE Trans. Smart Grid
Jianbing Ni, Kuan Zhang, Khalid Nawaf Alharbi, Xiaodong Lin, Ning Zhang, Xuemin Sherman Shen
2017 conf
ICC
Jianbing Ni, Xiaodong Lin, Qi Xia, Xuemin Sherman Shen
2017 J jnl
IEEE Trans. Veh. Technol.
Bo Liu, Wanlei Zhou, Tianqing Zhu, Haibo Zhou, Xiaodong Lin
2017 J jnl
IEEE Trans. Inf. Forensics Secur.
Aiqing Zhang, Lei Wang, Xinrong Ye, Xiaodong Lin
2017 conf
WCSP
Abdulrahman Alamer, Jianbing Ni, Xiaodong Lin, Xuemin Shen
2017 B conf
GLOBECOM
Jianbing Ni, Xiaodong Lin, Xuemin Shen
2017 conf
ICC
Jianbing Ni, Kuan Zhang, Xiaodong Lin, Qi Xia, Xuemin Sherman Shen
2017 conf
WCSP
Abdulrahman Alamer, Yong Deng, Xiaodong Lin
2017 J jnl
IEEE Commun. Mag.
Jianbing Ni, Aiqing Zhang, Xiaodong Lin, Xuemin Sherman Shen
2017 J jnl
IEEE Netw.
Aiqing Zhang, Xiaodong Lin
2017 Misc ed.
TRIDENTCOM
Song Guo, Guiyi Wei, Yang Xiang, Xiaodong Lin, Pascal Lorenz
2017 J jnl
IEEE Commun. Stand. Mag.
Xiaodong Lin
2016 B conf
GLOBECOM
Aiqing Zhang, Abel Bacchus, Xiaodong Lin
2016 B conf
GLOBECOM
Qinglei Kong, Rongxing Lu, Hui Zhu, Abdulrahman Alamer, Xiaodong Lin
2016 J jnl
IEEE Trans. Veh. Technol.
Jun Shao, Xiaodong Lin, Rongxing Lu, Cong Zuo
2016 conf
ICC
Jianbing Ni, Kuan Zhang, Xiaodong Lin, Haomiao Yang, Xuemin Sherman Shen
2016 C conf
SecureComm
Jianbing Ni, Kuan Zhang, Xiaodong Lin, Yong Yu, Xuemin (Sherman) Shen
2016 J jnl
Secur. Commun. Networks
Aiqing Zhang, Abel Bacchus, Xiaodong Lin
2016 C conf
ICCC
Jianbing Ni, Xiaodong Lin, Kuan Zhang, Yong Yu, Xuemin Sherman Shen
2016 conf
ICC
Jianbing Ni, Kuan Zhang, Xiaodong Lin, Xuemin Sherman Shen
2016 conf
ICC
Cheng Huang, Rongxing Lu, Hui Zhu, Jun Shao, Abdulrahman Alamer, Xiaodong Lin
2016 B conf
GLOBECOM
Khalid Nawaf Alharbi, Xiaodong Lin
2016 A conf
AsiaCCS
Cheng Huang, Rongxing Lu, Hui Zhu, Jun Shao, Xiaodong Lin
2016 J jnl
IEEE Netw.
Xiaodong Lin, Kim-Kwang Raymond Choo, Ying-Dar Lin, Peter Mueller
2016 J jnl
IEEE Netw.
Xiaoming Li, Qing Yang, Xiaodong Lin, Shaoen Wu, Mike P. Wittie
2016 B conf
GLOBECOM
Cheng Huang, Rongxing Lu, Hui Zhu, Hao Hu, Xiaodong Lin
2016 conf
VTC Fall
Jianbing Ni, Xiaodong Lin, Kuan Zhang, Xuemin Shen
2016 conf
ACISP (2)
Xiaodong Lin, Rongxing Lu
2016 J jnl
KSII Trans. Internet Inf. Syst.
Aiqing Zhang, Xinrong Ye, Jianxin Chen, Liang Zhou, Xiaodong Lin
2016 C conf
SecureComm
Yao Liu, Ming Xu, Jian Xu, Ning Zheng, Xiaodong Lin
2016 B conf
GLOBECOM
Jianbing Ni, Xiaodong Lin, Kuan Zhang, Yong Yu
2016 J jnl
Pervasive Mob. Comput.
Jun Shao, Rongxing Lu, Xiaodong Lin, Kaitai Liang
2016 C conf
ICCC
Jianbing Ni, Xiaodong Lin, Kuan Zhang, Yong Yu, Xuemin Sherman Shen
2016 B conf
GLOBECOM
Ting Chen, Haiyang Tang, Xiaodong Lin, Kuang Zhou, Xiaosong Zhang
2016 J jnl
Comput. Networks
Yanming Sun, Min Chen, Abel Bacchus, Xiaodong Lin
2015 B conf
GLOBECOM
Rongxing Lu, Khalid Nawaf Alharbi, Xiaodong Lin, Cheng Huang
2015 conf
ICC
Ye Wang, Jia Yu, Xiaodong Lin, Qinyu Zhang
2015 conf
ICC
Hongwei Li, Dongxiao Liu, Kun Jia, Xiaodong Lin
2015 J jnl
Secur. Commun. Networks
Shihong Zou, Jing Zhang, Xiaodong Lin
2015 J jnl
Secur. Commun. Networks
Ting Chen, Xiaodong Lin, Jin Huang, Abel Bacchus, Xiaosong Zhang
2015 conf
ICC
Chunhe Song, Xiaodong Lin
2015 J jnl
IEEE Netw.
Ye Wang, Xiaodong Lin
2015 conf
MobiMWareHN@MobiHoc
Jin Wang, Honggang Wang, Shaoen Wu, Xiaodong Lin, Qing Yang
2015 J jnl
Secur. Commun. Networks
Hui Zhu, Xiaodong Lin, Yun Zhang, Rongxing Lu
2015 conf
ICC
Jun Zhou, Zhenfu Cao, Xiaolei Dong, Xiaodong Lin
2015 B conf
GLOBECOM
Xuanli Wu, Zheming Ma, Xiaodong Lin
2015 C conf
HealthCom
Hongwei Li, Yuanshun Dai, Xiaodong Lin
2015 J jnl
KSII Trans. Internet Inf. Syst.
Hongwei Li, Dongxiao Liu, Khalid Nawaf Alharbi, Shenmin Zhang, Xiaodong Lin
2015 A* conf
INFOCOM
Jun Shao, Rongxing Lu, Xiaodong Lin
2015 J jnl
Peer-to-Peer Netw. Appl.
Le Chen, Rongxing Lu, Zhenfu Cao, Khalid Nawaf Alharbi, Xiaodong Lin
2015 J jnl
IEEE Netw.
Shui Yu, Xiaodong Lin, Jelena V. Misic
2015 C conf
ICCC
Jun Shao, Rongxing Lu, Xiaodong Lin, Cong Zuo
2015 J jnl
IEEE J. Sel. Top. Signal Process.
Jun Zhou, Zhenfu Cao, Xiaolei Dong, Xiaodong Lin
2015 J jnl
IEEE Trans. Parallel Distributed Syst.
Jun Zhou, Xiaodong Lin, Xiaolei Dong, Zhenfu Cao
2015 conf
ICC
Xuanli Wu, Xingling Han, Xiaodong Lin
2015 J jnl
Secur. Commun. Networks
Le Chen, Rongxing Lu, Khalid Nawaf Alharbi, Xiaodong Lin, Zhenfu Cao
2015 J jnl
IEEE Trans. Parallel Distributed Syst.
Mohamed M. E. A. Mahmoud, Xiaodong Lin, Xuemin Sherman Shen
2015 conf
MobiMWareHN@MobiHoc
Xiaodong Lin
2015 J jnl
IEEE Wirel. Commun.
Jun Zhou, Zhenfu Cao, Xiaolei Dong, Xiaodong Lin
2015 B conf
GLOBECOM
Jianbing Ni, Khalid Nawaf Alharbi, Xiaodong Lin, Xuemin Shen
2015 A* conf
INFOCOM
Jun Zhou, Zhenfu Cao, Xiaolei Dong, Xiaodong Lin
2015 J jnl
IEEE Trans. Emerg. Top. Comput.
Jamie Seto, Ye Wang, Xiaodong Lin
2015 J jnl
IEEE Wirel. Commun.
Ye Wang, Xiaodong Lin
2015 J jnl
IEEE Trans. Inf. Forensics Secur.
Jianting Ning, Xiaolei Dong, Zhenfu Cao, Lifei Wei, Xiaodong Lin
2014 J jnl
IACR Cryptol. ePrint Arch.
Zhengjun Cao, Ruizhong Wei, Xiaodong Lin
2014 C conf
ICCC
Khalid Nawaf Alharbi, Xiaodong Lin, Jun Shao
2014 B conf
GLOBECOM
Xiaolei Dong, Jun Zhou, Khalid Nawaf Alharbi, Xiaodong Lin, Zhenfu Cao
2014 A* conf
INFOCOM
Guangchi Liu, Qing Yang, Honggang Wang, Xiaodong Lin, Mike P. Wittie
2014 B conf
GLOBECOM
Ye Wang, Xiaodong Lin
2014 J jnl
IEEE Trans. Parallel Distributed Syst.
Hongwei Li, Xiaodong Lin, Haomiao Yang, Xiaohui Liang, Rongxing Lu, Xuemin Shen
2014 J jnl
IEEE Trans. Parallel Distributed Syst.
Xiaohui Liang, Xiaodong Lin, Xuemin (Sherman) Shen
2014 J jnl
IEEE J. Biomed. Health Informatics
Qinghua Shen, Xiaohui Liang, Xuemin Shen, Xiaodong Lin, Henry Y. Luo
2014 A* conf
INFOCOM
Jun Shao, Rongxing Lu, Xiaodong Lin
2014 conf
ESORICS (2)
Jianting Ning, Zhenfu Cao, Xiaolei Dong, Lifei Wei, Xiaodong Lin
2014 J jnl
KSII Trans. Internet Inf. Syst.
Ju Ren, Yaoxue Zhang, Xiaodong Lin
2014 C conf
ICCC
Chunhe Song, Xiaodong Lin
2014 J jnl
IEEE Netw.
Shui Yu, Xiaodong Lin, Jelena V. Misic
2014 A* conf
INFOCOM
Rongxing Lu, Xiaodong Lin, Zhiguo Shi, Jun Shao
2014 J jnl
Peer-to-Peer Netw. Appl.
Xu Li, Xiaodong Lin, Wenye Wang, Nathalie Mitton
2014 conf
ICC
Jia Yu, Ye Wang, Xiaodong Lin, Qinyu Zhang
2014 C conf
ProvSec
Rongxing Lu, Xiaodong Lin, Jun Shao, Kaitai Liang
2014 J jnl
KSII Trans. Internet Inf. Syst.
Jia Yu, Shaohua Wu, Xiaodong Lin, Qinyu Zhang
2014 J jnl
IEEE Wirel. Commun.
Xiaohui Liang, Kuan Zhang, Xuemin Shen, Xiaodong Lin
2014 conf
ICC
Yan Lin, Shaohua Wu, Jia Yu, Xiaodong Lin
2014 J jnl
IEEE Netw.
Honggang Wang, Zhaoyang Zhang, Xiaodong Lin, Hua Fang
2014 C conf
ICCC
Jia Yu, Ye Wang, Xiaodong Lin, Qinyu Zhang
2014 B conf
GLOBECOM
Jamie Seto, Ye Wang, Xiaodong Lin
2014 conf
ICC
Xuanli Wu, Lukuan Sun, Jia Yu, Xiaodong Lin, Ye Wang
2014 J jnl
Mob. Networks Appl.
Giancarlo Fortino, Xu Li, Xiaodong Lin, Oscar Mayora, Enrico Natalizio, Mehmet Rasit Yuce
2013 J jnl
IEEE Intell. Syst.
Rongxing Lu, Xiaodong Lin, Zhiguo Shi, Xuemin (Sherman) Shen
2013 J jnl
IEEE Trans. Veh. Technol.
Li Feng, Jianqing Li, Xiaodong Lin
2013 J jnl
IEEE Trans. Veh. Technol.
Xiaodong Lin, Xu Li
2013 conf
ICC
Hongbing Li, Zhihua Yang, Jian Jiao, Qinyu Zhang, Ruhai Wang, Xiaodong Lin
2013 conf
WCSP
Wei Jing, Hai Zhao, Chunhe Song, Xiaodong Lin, Xuemin Shen
2013 B conf
GLOBECOM
Siyuan Ma, Zhushou Tang, Qiuyu Xiao, Jiafa Liu, Tran Triet Duong, Xiaodong Lin, Haojin Zhu
2013 B conf
WCNC
Rongxing Lu, Xiaodong Lin, Zhiguo Shi, Xuemin Shen
2013 A* conf
INFOCOM
Zhaoyang Zhang, Honggang Wang, Xiaodong Lin, Hua Fang, Dong Xuan
2013 J jnl
IEEE J. Sel. Areas Commun.
Xiaohui Liang, Xu Li, Kuan Zhang, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2013 A* conf
INFOCOM
Rongxing Lu, Xiaodong Lin, Zhiguo Shi, Bin Cao, Xuemin (Sherman) Shen
2013 B conf
GLOBECOM
Ye Wang, Bin Cao, Xiaodong Lin, Qinyu Zhang
2013 conf
WCSP
Chunhe Song, Xiaodong Lin, Xuemin Shen, Henry Y. Luo
2013 J jnl
IEEE Wirel. Commun.
Qinyu Zhang, Bin Cao, Ye Wang, Naitong Zhang, Xiaodong Lin, Limin Sun
2013 A* conf
INFOCOM
Bin Cao, Jon W. Mark, Qinyu Zhang, Rongxing Lu, Xiaodong Lin, Xuemin (Sherman) Shen
2013 B conf
WCNC
Jiao Qin, Zhihua Yang, Jian Jiao, Qinyu Zhang, Xiaodong Lin, Bin Cao
2013 B conf
GLOBECOM
Qinghua Shen, Xiaohui Liang, Xuemin Shen, Xiaodong Lin, Henry Y. Luo
2013 J jnl
IEEE Trans. Parallel Distributed Syst.
Rongxing Lu, Xiaodong Lin, Xuemin (Sherman) Shen
2013 B conf
GLOBECOM
Chunhe Song, Xiaodong Lin, Xuemin Shen
2013 J jnl
IEEE Wirel. Commun.
Jun Zhou, Zhenfu Cao, Xiaolei Dong, Xiaodong Lin, Athanasios V. Vasilakos
2013 book
Xiaohui Liang, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2013 B conf
GLOBECOM
Wei Jing, Hai Zhao, Xiaodong Lin, Xuemin Shen
2013 J jnl
IEEE Trans. Smart Grid
Xiaohui Liang, Xu Li, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2012 J jnl
IEEE Trans. Intell. Transp. Syst.
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin (Sherman) Shen
2012 conf
ICC
Chris Carver, Xiaodong Lin
2012 C conf
ICCC
Zhongtian Jia, Muhammad Ali Raffay, Lixiang Li, Xiaodong Lin, Yixian Yang
2012 J jnl
IEEE Trans. Parallel Distributed Syst.
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Xiaohui Liang, Xuemin (Sherman) Shen
2012 conf
ADHOC-NOW
Vojislav B. Misic, Jelena V. Misic, Xiaodong Lin, Dragan Nerandzic
2012 conf
WCSP
Ye Wang, Peipei Chen, Qinyu Zhang, Xiaodong Lin
2012 B conf
GLOBECOM
Hongwei Li, Xiaohui Liang, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2012 J jnl
IEEE Trans. Parallel Distributed Syst.
Rongxing Lu, Xiaohui Liang, Xu Li, Xiaodong Lin, Xuemin Shen
2012 conf
ICC
Xiaohui Liang, Xu Li, Rongxing Lu, Xiaodong Lin, Xuemin (Sherman) Shen
2012 A* conf
INFOCOM
Xiaohui Liang, Xu Li, Qinghua Shen, Rongxing Lu, Xiaodong Lin, Xuemin Shen, Weihua Zhuang
2012 J jnl
J. Commun.
Xiaodong Lin, Joel José Puga Coelho Rodrigues, Xu Li
2012 J jnl
Comput. Commun.
Xiaohui Liang, Mrinmoy Barua, Rongxing Lu, Xiaodong Lin, Xuemin (Sherman) Shen
2012 conf
WCSP
Khalid Nawaf Alharbi, Xiaodong Lin
2012 J jnl
IEEE Trans. Veh. Technol.
Xiaohui Liang, Xu Li, Tom H. Luan, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2012 conf
ICDCS Workshops
Khalid Nawaf Alharbi, Xiaodong Lin
2012 A* conf
INFOCOM
Rongxing Lu, Xiaodong Lin, Tom H. Luan, Xiaohui Liang, Xu Li, Le Chen, Xuemin Shen
2012 J jnl
IEEE Trans. Veh. Technol.
Rongxing Lu, Xiaodong Lin, Tom H. Luan, Xiaohui Liang, Xuemin (Sherman) Shen
2012 J jnl
J. Netw. Comput. Appl.
Zhongtian Jia, Xiaodong Lin, Seng-Hua Tan, Lixiang Li, Yixian Yang
2012 A conf
ICDCS
Xiaohui Liang, Xu Li, Rongxing Lu, Xiaodong Lin, Xuemin (Sherman) Shen
2012 J jnl
IEEE Commun. Mag.
Xu Li, Xiaohui Liang, Rongxing Lu, Xuemin Shen, Xiaodong Lin, Haojin Zhu
2012 J jnl
Secur. Commun. Networks
Xiaodong Lin, Jianwei Liu, Stefanos Gritzalis
2012 conf
ICC
Shuai Li, Haojin Zhu, Bo Yang, Cailian Chen, Xinping Guan, Xiaodong Lin
2012 B conf
GLOBECOM
Yiyong Sun, Zhaoyu Gao, Suguo Du, Shuai Li, Haojin Zhu, Xiaodong Lin
2012 C conf
ICCC
Hongwei Luo, Guili He, Xiaodong Lin, Xuemin (Sherman) Shen
2011 ch.
Delay Tolerant Networks
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Yanfei Fan, Xuemin Shen
2011 J jnl
Mob. Networks Appl.
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin Shen
2011 J jnl
J. Netw. Comput. Appl.
Qing Chen, Zubair Md Fadlullah, Xiaodong Lin, Nei Kato
2011 J jnl
Secur. Commun. Networks
Xiaodong Lin
2011 J jnl
Wirel. Commun. Mob. Comput.
Xiaodong Lin, Hsiao-Hwa Chen
2011 B conf
GLOBECOM
Xiaohui Liang, Xu Li, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2011 J jnl
Secur. Commun. Networks
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin (Sherman) Shen
2011 conf
ICC
Rongxing Lu, Xiaodong Lin, Tom H. Luan, Xiaohui Liang, Xuemin Shen
2011 conf
ICC
Abdulelah Alganas, Xiaodong Lin, Ali Grami
2011 J jnl
J. Commun. Networks
Xuemin (Sherman) Shen, Jelena V. Misic, Nei Kato, Peter Langendörfer, Xiaodong Lin
2011 conf
ICC
Xiaohui Liang, Xu Li, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2011 J jnl
IEEE Commun. Mag.
Rongxing Lu, Xu Li, Xiaohui Liang, Xuemin Shen, Xiaodong Lin
2011 J jnl
J. Commun. Networks
Xiaohui Liang, Rongxing Lu, Le Chen, Xiaodong Lin, Xuemin (Sherman) Shen
2011 A* conf
INFOCOM
Xiaodong Lin, Rongxing Lu, Xiaohui Liang, Xuemin Shen
2011 J jnl
IEEE Commun. Mag.
Xu Li, Rongxing Lu, Xiaohui Liang, Xuemin Shen, Jiming Chen, Xiaodong Lin
2010 conf
e-Forensics
Zhenxing Lei, Theodora Dule, Xiaodong Lin
2010 conf
ICC
Yipin Sun, Rongxing Lu, Xiaodong Lin, Xuemin Shen, Jinshu Su
2010 J jnl
IEEE Trans. Veh. Technol.
Yipin Sun, Rongxing Lu, Xiaodong Lin, Xuemin Shen, Jinshu Su
2010 conf
e-Forensics
Xiaodong Lin, Rongxing Lu, Kevin Foxton, Xuemin (Sherman) Shen
2010 J jnl
IEEE Trans. Veh. Technol.
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Xuemin Shen
2010 A* conf
INFOCOM
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Xuemin Shen, Dongsheng Xing, Zhenfu Cao
2010 J jnl
IEEE Wirel. Commun.
Albert Wasef, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2010 conf
CASCON
Shahram Heydari, Miguel Vargas Martin, Walid Rjaibi, Xiaodong Lin
2010 B conf
GLOBECOM
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin Shen
2010 J jnl
Wirel. Commun. Mob. Comput.
Xiaodong Lin, Rongxing Lu, Xuemin (Sherman) Shen
2010 B conf
GLOBECOM
Xiaohui Liang, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2010 conf
e-Forensics
Xiaodong Lin, Chenxi Zhang, Theodora Dule
2010 conf
VTC Fall
Xiaohui Liang, Rongxing Lu, Xiaodong Lin, Xuemin Shen
2010 J jnl
IEEE Trans. Wirel. Commun.
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Xuemin Shen, Bruno R. Preiss
2010 B conf
GLOBECOM
Yanfei Fan, Jiming Chen, Xiaodong Lin, Xuemin Shen
2010 J jnl
Comput. Networks
Xiaodong Lin, Rongxing Lu, Davis Kwan, Xuemin Shen
2010 conf
ICC
Yipin Sun, Xiaodong Lin, Rongxing Lu, Xuemin Shen, Jinshu Su
2010 A* conf
INFOCOM
Rongxing Lu, Xiaodong Lin, Xuemin Shen
2010 B conf
GLOBECOM
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin Shen
2010 conf
BODYNETS
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin (Sherman) Shen
2010 A conf
AsiaCCS
Rongxing Lu, Xiaodong Lin, Xiaohui Liang, Xuemin (Sherman) Shen
2010 conf
ICC
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Xuemin Shen
2009 B conf
GLOBECOM
Qing Chen, Xiaodong Lin, Sherman X. Shen, Kazuo Hashimoto, Nei Kato
2009 J jnl
IEEE Trans. Veh. Technol.
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2009 B conf
GLOBECOM
Xiaodong Lin
2009 B conf
ICCCN
Xiaodong Lin, Rongxing Lu, Xuemin Shen
2009 J jnl
IEEE Trans. Veh. Technol.
Haojin Zhu, Xiaodong Lin, Minghui Shi, Pin-Han Ho, Xuemin Shen
2009 J jnl
IEEE Trans. Veh. Technol.
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Yanfei Fan, Xuemin Shen
2009 A* conf
INFOCOM
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Xuemin Shen
2009 J jnl
IEEE J. Sel. Areas Commun.
Xiaodong Lin, Rongxing Lu, Xuemin Shen, Yoshiaki Nemoto, Nei Kato
2009 J jnl
IEEE Wirel. Commun.
Haojin Zhu, Rongxing Lu, Xuemin Shen, Xiaodong Lin
2008 B conf
WCNC
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Pin-Han Ho, Xuemin Shen, Zhenfu Cao
2008 B conf
WCNC
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Chenxi Zhang, Pin-Han Ho, Xuemin Shen
2008 Misc conf
SAC
Zonghua Zhang, Farid Naït-Abdesselam, Xiaodong Lin, Pin-Han Ho
2008 J jnl
Int. J. Secur. Networks
Xiaodong Lin, Xinhua Ling, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2008 J jnl
Int. J. Comput. Math.
Rongxing Lu, Xiaodong Lin, Zhenfu Cao, Liuquan Qin, Xiaohui Liang
2008 conf
ICC
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Pin-Han Ho, Xuemin Shen
2008 conf
ICC
Rongxing Lu, Xiaodong Lin, Chenxi Zhang, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2008 A* conf
INFOCOM
Chenxi Zhang, Rongxing Lu, Xiaodong Lin, Pin-Han Ho, Xuemin Shen
2008 J jnl
IEEE Trans. Veh. Technol.
Chenxi Zhang, Xiaodong Lin, Rongxing Lu, Pin-Han Ho, Xuemin Shen
2008 B conf
GLOBECOM
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Xuemin Shen, Pin-Han Ho
2008 A* conf
INFOCOM
Rongxing Lu, Xiaodong Lin, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2008 J jnl
Inf. Sci.
Rongxing Lu, Xiaodong Lin, Zhenfu Cao, Jun Shao, Xiaohui Liang
2008 conf
ICC
Xiaodong Lin, Rongxing Lu, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2008 B conf
WCNC
Zonghua Zhang, Farid Naït-Abdesselam, Pin-Han Ho, Xiaodong Lin
2008 conf
ICC
Chenxi Zhang, Xiaodong Lin, Rongxing Lu, Pin-Han Ho
2008 J jnl
IEEE Trans. Wirel. Commun.
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Pin-Han Ho, Xuemin Shen
2008 J jnl
IEEE Commun. Mag.
Xiaodong Lin, Rongxing Lu, Chenxi Zhang, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2008 J jnl
IEEE Trans. Wirel. Commun.
Xiaodong Lin, Xiaoting Sun, Xiaoyu Wang, Chenxi Zhang, Pin-Han Ho, Xuemin Shen
2008 J jnl
IEEE Trans. Wirel. Commun.
Xiaodong Lin, Rongxing Lu, Pin-Han Ho, Xuemin Shen, Zhenfu Cao
2007 B conf
WCNC
Xiaodong Lin, Rongxing Lu, Pin-Han Ho, Xuemin Shen, Zhenfu Cao
2007 C conf
QSHINE
Chenxi Zhang, Xiaoting Sun, Xiaodong Lin, Pin-Han Ho
2007 conf
ICC
Xiaodong Lin, Rongxing Lu, Haojin Zhu, Pin-Han Ho, Xuemin Shen, Zhenfu Cao
2007 J jnl
IEEE Trans. Veh. Technol.
Xiaodong Lin, Xiaoting Sun, Pin-Han Ho, Xuemin Shen
2007 B conf
GLOBECOM
Xiaodong Lin, Chenxi Zhang, Xiaoting Sun, Pin-Han Ho, Xuemin Shen
2007 B conf
GLOBECOM
Haojin Zhu, Xiaodong Lin, Rongxing Lu, Pin-Han Ho, Xuemin Shen
2007 conf
ICC
Xiaoting Sun, Xiaodong Lin, Pin-Han Ho
2007 B conf
WCNC
Haojin Zhu, Xiaodong Lin, Pin-Han Ho, Xuemin Shen, Minghui Shi
2007 C conf
QSHINE
Xiaodong Lin, Pin-Han Ho, Xuemin (Sherman) Shen
2007 conf
ICC
Xiaodong Lin, Haojin Zhu, Pin-Han Ho, Xuemin Shen
2006 B conf
GLOBECOM
Xiaodong Lin, Haojin Zhu, Bin Lin, Pin-Han Ho, Xuemin Shen
2006 Misc conf
ICISC
Zonghua Zhang, Pin-Han Ho, Xiaodong Lin, Hong Shen
2000 conf
ISW
Xiaodong Lin, Johnny W. Wong, Weidong Kou
tests/unit/test_decompile_modules.py
← Index tests/unit/test_decompile_modules.py python
"""
Unit tests for --decompile-modules flag.

Tests that:
1. CLI argument parsing and validation works correctly
2. decompile_modules is threaded through the entire call chain
3. BinaryNinjaDecompiler.analyze_binary() gates extractions per selected modules
4. DecompileBinja.prepare_export_data() filters DB tables per selected modules
"""
import os
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.unit]


# ============================================================================
# CLI Argument Parsing Tests
# ============================================================================

class TestDecompileModulesCliArgument:
    """Tests for --decompile-modules CLI argument parsing in start.py."""

    def _parse_args(self, args_list):
        """Helper to parse CLI args without running main()."""
        import argparse

        parser = argparse.ArgumentParser()
        input_group = parser.add_mutually_exclusive_group(required=True)
        input_group.add_argument("--path")
        input_group.add_argument("--s3", action="store_true")
        input_group.add_argument("--s3-solo", metavar="S3_KEY")
        input_group.add_argument("--nomad-job", action="store_true")
        input_group.add_argument("--date", metavar="YYYY-MM-DD")
        input_group.add_argument("--range", nargs=2)
        input_group.add_argument("--analyzed", action="store_true")

        parser.add_argument("--repo")
        parser.add_argument("--index_prefix", default="redb")
        parser.add_argument("-d", "--decompile", action="store_true")
        parser.add_argument("-m", "--modules", default="all")
        parser.add_argument("--decompile-modules", default="all")
        parser.add_argument("--force", action="store_true")
        parser.add_argument("--dry-run", action="store_true")

        return parser.parse_args(args_list)

    def test_decompile_modules_default_all(self):
        """--decompile-modules defaults to 'all'."""
        args = self._parse_args(["--path", "/tmp/test", "--repo", "test"])
        assert args.decompile_modules == "all"

    def test_decompile_modules_single(self):
        """--decompile-modules accepts a single module."""
        args = self._parse_args([
            "--path", "/tmp/test", "--repo", "test",
            "-d", "--decompile-modules", "strings"
        ])
        assert args.decompile_modules == "strings"

    def test_decompile_modules_comma_separated(self):
        """--decompile-modules accepts comma-separated modules."""
        args = self._parse_args([
            "--path", "/tmp/test", "--repo", "test",
            "-d", "--decompile-modules", "cfg,llil,strings"
        ])
        assert args.decompile_modules == "cfg,llil,strings"

    def test_decompile_modules_with_decompile_flag(self):
        """--decompile-modules works with -d flag."""
        args = self._parse_args([
            "--path", "/tmp/test", "--repo", "test",
            "-d", "--decompile-modules", "disassembly"
        ])
        assert args.decompile is True
        assert args.decompile_modules == "disassembly"


# ============================================================================
# Validation Tests
# ============================================================================

class TestDecompileModulesValidation:
    """Tests for --decompile-modules validation logic in start.py."""

    def test_valid_modules_set_parsing(self):
        """Valid comma-separated modules are parsed into a set."""
        VALID = {"all", "decompilation", "disassembly", "cfg", "llil", "strings"}
        raw = "cfg,llil,strings"
        modules_set = {m.strip() for m in raw.split(",")}
        invalid = modules_set - VALID
        assert invalid == set()
        assert modules_set == {"cfg", "llil", "strings"}

    def test_invalid_module_detected(self):
        """Invalid module names are detected."""
        VALID = {"all", "decompilation", "disassembly", "cfg", "llil", "strings"}
        raw = "cfg,invalid_module"
        modules_set = {m.strip() for m in raw.split(",")}
        invalid = modules_set - VALID
        assert invalid == {"invalid_module"}

    def test_all_keyword_as_set(self):
        """'all' is parsed into {'all'} set."""
        raw = "all"
        if raw == "all":
            modules_set = {"all"}
        assert modules_set == {"all"}

    def test_whitespace_handling(self):
        """Whitespace around module names is stripped."""
        raw = " cfg , llil , strings "
        modules_set = {m.strip() for m in raw.split(",")}
        assert modules_set == {"cfg", "llil", "strings"}


# ============================================================================
# Ingestor Parameter Storage Tests
# ============================================================================

class TestIngestorDecompileModules:
    """Tests that Ingestor stores decompile_modules correctly."""

    @patch('builtins.open', MagicMock())
    @patch('redb.ingestor.multiprocessing')
    @patch('redb.ingestor.datetime')
    def test_ingestor_stores_decompile_modules(self, mock_datetime, mock_mp):
        """Ingestor stores the decompile_modules set."""
        mock_mp.Manager.return_value.dict = Mock(side_effect=[{}, {}])
        mock_datetime.today.return_value.strftime.return_value = "20260222"

        from redb.ingestor import Ingestor
        ingestor = Ingestor(
            path="/tmp/test", repository="test", index_prefix="redb",
            decompile_modules={"cfg", "strings"}
        )
        assert ingestor.decompile_modules == {"cfg", "strings"}

    @patch('builtins.open', MagicMock())
    @patch('redb.ingestor.multiprocessing')
    @patch('redb.ingestor.datetime')
    def test_ingestor_defaults_to_all(self, mock_datetime, mock_mp):
        """Ingestor defaults decompile_modules to {'all'} when not provided."""
        mock_mp.Manager.return_value.dict = Mock(side_effect=[{}, {}])
        mock_datetime.today.return_value.strftime.return_value = "20260222"

        from redb.ingestor import Ingestor
        ingestor = Ingestor(
            path="/tmp/test", repository="test", index_prefix="redb"
        )
        assert ingestor.decompile_modules == {"all"}

    @patch('builtins.open', MagicMock())
    @patch('redb.ingestor.multiprocessing')
    @patch('redb.ingestor.datetime')
    def test_ingestor_none_defaults_to_all(self, mock_datetime, mock_mp):
        """Ingestor converts None decompile_modules to {'all'}."""
        mock_mp.Manager.return_value.dict = Mock(side_effect=[{}, {}])
        mock_datetime.today.return_value.strftime.return_value = "20260222"

        from redb.ingestor import Ingestor
        ingestor = Ingestor(
            path="/tmp/test", repository="test", index_prefix="redb",
            decompile_modules=None
        )
        assert ingestor.decompile_modules == {"all"}


# ============================================================================
# Function Chain Threading Tests
# ============================================================================

class TestDecompileModulesThreading:
    """Tests that decompile_modules is correctly threaded through the call chain."""

    @patch('redb.workers.process_binary_file')
    @patch('redb.workers.is_binary_file', return_value=True)
    def test_process_file_internal_passes_decompile_modules(self, mock_is_binary, mock_process):
        """_process_file_internal passes decompile_modules to process_binary_file."""
        from redb.ingestor import _process_file_internal

        mock_process.return_value = (Mock(), "pebin")
        logger = Mock()
        modules = {"cfg", "strings"}

        _process_file_internal(
            "/tmp/test.bin", False, "redb", logger,
            decompile_modules=modules
        )

        mock_process.assert_called_once()
        call_kwargs = mock_process.call_args[1]
        assert call_kwargs["decompile_modules"] == modules

    @patch('redb.workers.process_binary_file')
    @patch('redb.workers.is_binary_file', return_value=True)
    def test_process_file_internal_default_decompile_modules_none(self, mock_is_binary, mock_process):
        """_process_file_internal defaults decompile_modules to None."""
        from redb.ingestor import _process_file_internal

        mock_process.return_value = (Mock(), "pebin")
        logger = Mock()

        _process_file_internal("/tmp/test.bin", False, "redb", logger)

        call_kwargs = mock_process.call_args[1]
        assert call_kwargs["decompile_modules"] is None

    @patch('redb.workers._process_file_internal')
    def test_process_file_passes_decompile_modules(self, mock_internal):
        """process_file passes decompile_modules to _process_file_internal."""
        from redb.workers import process_file

        mock_internal.return_value = (Mock(), "pebin")
        modules = {"llil", "disassembly"}

        with patch('redb.workers.setup_direct_logger', return_value=Mock()):
            process_file(
                "/tmp/test.bin", False, "redb", "/tmp/log", 1, 1,
                decompile_modules=modules
            )

        mock_internal.assert_called_once()
        call_kwargs = mock_internal.call_args[1]
        assert call_kwargs["decompile_modules"] == modules

    @patch('redb.workers._process_file_internal')
    def test_process_s3_file_passes_decompile_modules(self, mock_internal):
        """process_s3_file passes decompile_modules to _process_file_internal."""
        from redb.workers import process_s3_file

        mock_internal.return_value = (Mock(), "pebin")
        modules = {"cfg"}

        with patch('redb.workers.setup_direct_logger', return_value=Mock()), \
             patch('redb.workers.download_s3_object', return_value="/tmp/downloaded.bin"):
            process_s3_file(
                "bucket", "key", "/tmp", False, "redb", "/tmp/log", 1, 1,
                decompile_modules=modules
            )

        mock_internal.assert_called_once()
        call_kwargs = mock_internal.call_args[1]
        assert call_kwargs["decompile_modules"] == modules

    @patch('redb.workers.process_binary_file')
    def test_process_zip_passes_decompile_modules(self, mock_process):
        """process_zip_file passes decompile_modules to process_binary_file."""
        from redb.workers import process_zip_file

        mock_process.return_value = (Mock(), "pebin")
        logger = Mock()
        modules = {"strings", "decompilation"}

        import tempfile
        import zipfile

        with tempfile.NamedTemporaryFile(suffix=".zip", delete=False) as tmp:
            tmp_path = tmp.name

        try:
            with zipfile.ZipFile(tmp_path, 'w') as zf:
                zf.writestr("test.bin", b"\x00" * 100)

            process_zip_file(
                tmp_path, False, "redb", logger, "all",
                decompile_modules=modules
            )

            mock_process.assert_called_once()
            call_kwargs = mock_process.call_args[1]
            assert call_kwargs["decompile_modules"] == modules
        finally:
            os.unlink(tmp_path)

    @patch('redb.workers.process_binary_file')
    def test_process_7zip_passes_decompile_modules(self, mock_process):
        """process_7zip_file passes decompile_modules to process_binary_file."""
        from redb.workers import process_7zip_file

        mock_process.return_value = (Mock(), "pebin")
        logger = Mock()
        modules = {"cfg", "llil"}

        with patch('redb.workers.py7zr') as mock_py7zr:
            mock_zf = Mock()
            mock_py7zr.SevenZipFile.return_value.__enter__ = Mock(return_value=mock_zf)
            mock_py7zr.SevenZipFile.return_value.__exit__ = Mock(return_value=False)

            def fake_extractall(path):
                dest = os.path.join(path, "test.bin")
                with open(dest, "wb") as f:
                    f.write(b"\x00" * 100)

            mock_zf.extractall = fake_extractall

            process_7zip_file(
                "/tmp/test.7z", False, "redb", logger, "all",
                decompile_modules=modules
            )

            if mock_process.called:
                call_kwargs = mock_process.call_args[1]
                assert call_kwargs["decompile_modules"] == modules

    def test_worker_unpacks_decompile_modules(self):
        """worker() correctly unpacks decompile_modules from args tuple."""
        from redb.workers import worker

        modules = {"strings", "cfg"}

        with patch('redb.workers.process_file') as mock_pf, \
             patch('redb.workers.signal'), \
             patch('redb.workers.gc'):
            mock_pf.return_value = (Mock(), "pebin")

            args = (
                "/tmp/test.bin",  # filepath
                True,             # decompile
                "redb",           # index_prefix
                "/tmp/log",       # log_file
                1,                # file_number
                10,               # total_files
                "all",            # selected_modules
                False,            # dry_run
                False,            # yara_scan
                False,            # with_yara
                False,            # force
                modules,          # decompile_modules
            )

            worker(args)

            mock_pf.assert_called_once()
            call_kwargs = mock_pf.call_args[1]
            assert call_kwargs["decompile_modules"] == modules


# ============================================================================
# BinaryNinjaDecompiler._module_selected() Tests
# ============================================================================

class TestModuleSelected:
    """Tests for BinaryNinjaDecompiler._module_selected() helper."""

    def _make_decompiler(self, decompile_modules):
        """Create a minimal BinaryNinjaDecompiler-like object for testing _module_selected."""

        class FakeDecompiler:
            def __init__(self, modules):
                self.decompile_modules = modules

            def _module_selected(self, module_name):
                return "all" in self.decompile_modules or module_name in self.decompile_modules

        return FakeDecompiler(decompile_modules)

    def test_all_selects_everything(self):
        d = self._make_decompiler({"all"})
        assert d._module_selected("strings") is True
        assert d._module_selected("decompilation") is True
        assert d._module_selected("disassembly") is True
        assert d._module_selected("cfg") is True
        assert d._module_selected("llil") is True

    def test_specific_module_selected(self):
        d = self._make_decompiler({"cfg", "strings"})
        assert d._module_selected("cfg") is True
        assert d._module_selected("strings") is True
        assert d._module_selected("decompilation") is False
        assert d._module_selected("disassembly") is False
        assert d._module_selected("llil") is False

    def test_empty_set_selects_nothing(self):
        d = self._make_decompiler(set())
        assert d._module_selected("strings") is False
        assert d._module_selected("decompilation") is False

    def test_single_module(self):
        d = self._make_decompiler({"llil"})
        assert d._module_selected("llil") is True
        assert d._module_selected("cfg") is False
        assert d._module_selected("strings") is False


# ============================================================================
# analyze_binary() Selective Execution Tests
# ============================================================================

class TestAnalyzeBinaryGating:
    """Tests that analyze_binary() gates extraction per decompile_modules.

    Uses a FakeDecompiler to test the gating logic without importing binaryninja.
    """

    def _make_analyze_binary_runner(self, decompile_modules):
        """Create a test harness that simulates the gating logic of analyze_binary()."""
        run_all = "all" in decompile_modules
        run_strings = run_all or "strings" in decompile_modules
        run_decompilation = run_all or "decompilation" in decompile_modules
        run_disassembly = run_all or "disassembly" in decompile_modules
        run_llil = run_all or "llil" in decompile_modules
        run_cfg = run_all or "cfg" in decompile_modules
        need_per_function = run_decompilation or run_disassembly or run_llil or run_cfg

        return {
            "run_strings": run_strings,
            "run_decompilation": run_decompilation,
            "run_disassembly": run_disassembly,
            "run_llil": run_llil,
            "run_cfg": run_cfg,
            "need_per_function": need_per_function,
        }

    def test_all_runs_everything(self):
        r = self._make_analyze_binary_runner({"all"})
        assert r["run_strings"] is True
        assert r["run_decompilation"] is True
        assert r["run_disassembly"] is True
        assert r["run_llil"] is True
        assert r["run_cfg"] is True
        assert r["need_per_function"] is True

    def test_strings_only_skips_per_function_loop(self):
        """Selecting only 'strings' should skip the per-function loop entirely."""
        r = self._make_analyze_binary_runner({"strings"})
        assert r["run_strings"] is True
        assert r["run_decompilation"] is False
        assert r["run_disassembly"] is False
        assert r["run_llil"] is False
        assert r["run_cfg"] is False
        assert r["need_per_function"] is False

    def test_cfg_only_runs_cfg_and_disassembly_in_loop(self):
        """Selecting only 'cfg' should run the per-function loop but skip decompilation/llil/strings."""
        r = self._make_analyze_binary_runner({"cfg"})
        assert r["run_strings"] is False
        assert r["run_decompilation"] is False
        assert r["run_disassembly"] is False  # Not selected (but backbone runs anyway in real code)
        assert r["run_llil"] is False
        assert r["run_cfg"] is True
        assert r["need_per_function"] is True

    def test_decompilation_only(self):
        r = self._make_analyze_binary_runner({"decompilation"})
        assert r["run_decompilation"] is True
        assert r["run_strings"] is False
        assert r["run_cfg"] is False
        assert r["run_llil"] is False
        assert r["need_per_function"] is True

    def test_multiple_modules(self):
        r = self._make_analyze_binary_runner({"cfg", "llil", "strings"})
        assert r["run_strings"] is True
        assert r["run_cfg"] is True
        assert r["run_llil"] is True
        assert r["run_decompilation"] is False
        assert r["run_disassembly"] is False
        assert r["need_per_function"] is True

    def test_disassembly_only(self):
        r = self._make_analyze_binary_runner({"disassembly"})
        assert r["run_disassembly"] is True
        assert r["run_decompilation"] is False
        assert r["run_strings"] is False
        assert r["run_cfg"] is False
        assert r["run_llil"] is False
        assert r["need_per_function"] is True


# ============================================================================
# prepare_export_data() Table Filtering Tests
# ============================================================================

class TestPrepareExportDataFiltering:
    """Tests that prepare_export_data() only includes tables for selected modules.

    Simulates the filtering logic from DecompileBinja.prepare_export_data()
    without importing binaryninja.
    """

    def _get_export_tables(self, decompile_modules):
        """Simulate the table selection logic from prepare_export_data()."""
        run_all = "all" in decompile_modules
        run_decompilation = run_all or "decompilation" in decompile_modules
        run_disassembly = run_all or "disassembly" in decompile_modules
        run_llil = run_all or "llil" in decompile_modules
        run_cfg = run_all or "cfg" in decompile_modules
        run_strings = run_all or "strings" in decompile_modules

        tables = set()
        if run_decompilation:
            tables.update(["decompiled_content", "decompiled_refs"])
        if run_disassembly:
            tables.update(["disassembled_content", "disassembled_refs", "function_similarity_metrics"])
        if run_llil:
            tables.update(["llil_content", "llil_refs"])
        if run_cfg:
            tables.update(["cfg_functions"])
        if run_strings:
            tables.update(["strings_raw"])
        # Errors always included if per-function loop ran
        if run_decompilation or run_disassembly or run_llil or run_cfg:
            tables.add("function_analysis_errors")

        return tables

    def test_all_includes_all_tables(self):
        tables = self._get_export_tables({"all"})
        assert "decompiled_content" in tables
        assert "decompiled_refs" in tables
        assert "disassembled_content" in tables
        assert "disassembled_refs" in tables
        assert "function_similarity_metrics" in tables
        assert "llil_content" in tables
        assert "llil_refs" in tables
        assert "cfg_functions" in tables
        assert "strings_raw" in tables
        assert "function_analysis_errors" in tables

    def test_strings_only_includes_only_strings(self):
        tables = self._get_export_tables({"strings"})
        assert tables == {"strings_raw"}

    def test_cfg_only_includes_cfg_and_errors(self):
        tables = self._get_export_tables({"cfg"})
        assert tables == {"cfg_functions", "function_analysis_errors"}

    def test_decompilation_only_tables(self):
        tables = self._get_export_tables({"decompilation"})
        assert tables == {"decompiled_content", "decompiled_refs", "function_analysis_errors"}

    def test_disassembly_only_tables(self):
        tables = self._get_export_tables({"disassembly"})
        assert tables == {
            "disassembled_content", "disassembled_refs",
            "function_similarity_metrics", "function_analysis_errors"
        }

    def test_llil_only_tables(self):
        tables = self._get_export_tables({"llil"})
        assert tables == {"llil_content", "llil_refs", "function_analysis_errors"}

    def test_combined_cfg_strings_tables(self):
        tables = self._get_export_tables({"cfg", "strings"})
        assert tables == {"cfg_functions", "strings_raw", "function_analysis_errors"}

    def test_no_errors_table_for_strings_only(self):
        """Error table should NOT be included when only strings is selected (no per-function loop)."""
        tables = self._get_export_tables({"strings"})
        assert "function_analysis_errors" not in tables


# ============================================================================
# DecompileBinja Parameter Acceptance Tests
# ============================================================================

class TestDecompileBinjaDecompileModules:
    """Tests that DecompileBinja accepts and stores decompile_modules.

    Since DecompileBinja imports binaryninja (which requires blake3 etc),
    we test the default/init logic in isolation.
    """

    def test_default_decompile_modules(self):
        """decompile_modules defaults to {'all'} when None."""
        modules = None
        result = modules or {"all"}
        assert result == {"all"}

    def test_explicit_decompile_modules(self):
        """Explicit decompile_modules is preserved."""
        modules = {"cfg", "llil"}
        result = modules or {"all"}
        assert result == {"cfg", "llil"}

    def test_empty_set_becomes_all(self):
        """Empty set is falsy and defaults to {'all'}."""
        modules = set()
        result = modules or {"all"}
        assert result == {"all"}


# ============================================================================
# Integration-Style: analyze_binary() Per-Function Gating (Logic Tests)
# ============================================================================

class TestAnalyzeBinaryPerFunctionGating:
    """Test that the per-function extraction gating produces correct results structures.

    These test the logic patterns from analyze_binary() using mock data,
    verifying that:
    - Unselected modules produce empty result lists
    - Selected modules produce populated result lists
    - Disassembly always runs when any per-function module is selected
    - Cross-linkage None handling works when counterparts are skipped
    """

    def _simulate_per_function_results(self, decompile_modules, num_functions=3):
        """Simulate the per-function extraction loop from analyze_binary().

        Returns results dict with the same structure as analyze_binary().
        """
        run_all = "all" in decompile_modules
        run_strings = run_all or "strings" in decompile_modules
        run_decompilation = run_all or "decompilation" in decompile_modules
        run_disassembly = run_all or "disassembly" in decompile_modules
        run_llil = run_all or "llil" in decompile_modules
        run_cfg = run_all or "cfg" in decompile_modules
        need_per_function = run_decompilation or run_disassembly or run_llil or run_cfg

        results = {
            "decompiled": [],
            "disassembled": [],
            "cfg": [],
            "llil": [],
            "errors": [],
            "strings": [],
        }

        if run_strings:
            results["strings"] = [{"string": f"str_{i}"} for i in range(5)]

        if not need_per_function:
            return results

        for i in range(num_functions):
            hlil_json = {"decompiled_function_hash": f"hlil_{i}"} if run_decompilation else None
            disass_json = {"disassembled_function_hash": f"disass_{i}", "disassembled_function_name": f"func_{i}", "disassembled_function_address": i * 100}  # always
            cfg_json = {"function_address": i * 100, "cyclomatic_complexity": 5} if run_cfg else None
            lowlevel_json = {"sha256_llil": f"llil_{i}", "tlsh_llil": "def", "minhash": [1, 2]} if run_llil else None

            # Simulate cross-linkage (same pattern as real code)
            if hlil_json and disass_json:
                hlil_json["disassembled_function_hash"] = disass_json["disassembled_function_hash"]
                disass_json["decompiled_function_hash"] = hlil_json["decompiled_function_hash"]
                results["decompiled"].append(hlil_json)
                if run_disassembly:
                    results["disassembled"].append(disass_json)
            elif hlil_json:
                hlil_json["disassembled_function_hash"] = None
                results["decompiled"].append(hlil_json)
            elif disass_json:
                disass_json["decompiled_function_hash"] = None
                if run_disassembly:
                    results["disassembled"].append(disass_json)

            if lowlevel_json and disass_json:
                lowlevel_json["disassembled_function_hash"] = disass_json["disassembled_function_hash"]
                disass_json["tlsh_llil"] = lowlevel_json.get("tlsh_llil")
                disass_json["minhash"] = lowlevel_json.get("minhash")
            elif lowlevel_json:
                lowlevel_json["disassembled_function_hash"] = None
            elif disass_json:
                disass_json["tlsh_llil"] = None
                disass_json["minhash"] = None

            if lowlevel_json:
                results["llil"].append(lowlevel_json)

            if cfg_json and disass_json:
                cfg_json["disassembled_function_hash"] = disass_json["disassembled_function_hash"]
                disass_json["cyclomatic_complexity"] = cfg_json.get("cyclomatic_complexity")
                results["cfg"].append(cfg_json)
            elif cfg_json:
                cfg_json["disassembled_function_hash"] = None
                results["cfg"].append(cfg_json)

            if disass_json and "cyclomatic_complexity" not in disass_json:
                disass_json["cyclomatic_complexity"] = None

        return results

    def test_all_populates_everything(self):
        r = self._simulate_per_function_results({"all"}, 3)
        assert len(r["decompiled"]) == 3
        assert len(r["disassembled"]) == 3
        assert len(r["cfg"]) == 3
        assert len(r["llil"]) == 3
        assert len(r["strings"]) == 5

    def test_strings_only_populates_strings(self):
        r = self._simulate_per_function_results({"strings"}, 3)
        assert len(r["strings"]) == 5
        assert len(r["decompiled"]) == 0
        assert len(r["disassembled"]) == 0
        assert len(r["cfg"]) == 0
        assert len(r["llil"]) == 0

    def test_cfg_only_populates_cfg_no_disassembly_export(self):
        """With only 'cfg' selected, cfg list is populated but disassembled is empty
        (disassembly runs internally but not exported)."""
        r = self._simulate_per_function_results({"cfg"}, 3)
        assert len(r["cfg"]) == 3
        assert len(r["disassembled"]) == 0  # Not selected for export
        assert len(r["decompiled"]) == 0
        assert len(r["llil"]) == 0
        assert len(r["strings"]) == 0

    def test_cfg_has_disassembled_function_hash_linkage(self):
        """CFG entries get disassembled_function_hash from backbone disassembly."""
        r = self._simulate_per_function_results({"cfg"}, 2)
        for cfg in r["cfg"]:
            assert cfg["disassembled_function_hash"] is not None
            assert cfg["disassembled_function_hash"].startswith("disass_")

    def test_decompilation_only_has_none_disassembly_linkage_when_no_disasm(self):
        """When only decompilation selected, disassembled still runs (backbone)
        so linkage is still available."""
        r = self._simulate_per_function_results({"decompilation"}, 2)
        assert len(r["decompiled"]) == 2
        # Disassembly runs as backbone, so linkage hash is present
        for d in r["decompiled"]:
            assert d["disassembled_function_hash"] is not None

    def test_disassembly_without_llil_has_none_fuzzy_hashes(self):
        """When LLIL is not selected, disassembly records have None fuzzy hashes."""
        r = self._simulate_per_function_results({"disassembly"}, 2)
        for d in r["disassembled"]:
            assert d["tlsh_llil"] is None
            assert d["minhash"] is None

    def test_disassembly_without_decompilation_has_none_decompiled_hash(self):
        """When decompilation is not selected, disassembly has None decompiled_function_hash."""
        r = self._simulate_per_function_results({"disassembly"}, 2)
        for d in r["disassembled"]:
            assert d["decompiled_function_hash"] is None

    def test_disassembly_without_cfg_has_none_cyclomatic(self):
        """When CFG is not selected, disassembly has None cyclomatic_complexity."""
        r = self._simulate_per_function_results({"disassembly"}, 2)
        for d in r["disassembled"]:
            assert d["cyclomatic_complexity"] is None

    def test_all_linkage_populated(self):
        """When all modules run, all cross-linkage fields are populated."""
        r = self._simulate_per_function_results({"all"}, 2)
        for d in r["disassembled"]:
            assert d["decompiled_function_hash"] is not None
            assert d["tlsh_llil"] is not None
            assert d["cyclomatic_complexity"] is not None
        for h in r["decompiled"]:
            assert h["disassembled_function_hash"] is not None
        for c in r["cfg"]:
            assert c["disassembled_function_hash"] is not None
        for ll in r["llil"]:
            assert ll["disassembled_function_hash"] is not None


# ============================================================================
# IOC Extraction Gating by decompile_modules
# ============================================================================

class TestIOCExtractionGating:
    """Tests that IOC extraction only runs when its data sources are present.

    IOCExtractorFromResults consumes in-memory analysis_results['strings']
    and analysis_results['decompiled']. It runs automatically (implicit
    dependency) when 'decompilation' or 'strings' modules produce data.
    It is NOT a standalone selectable module.
    """

    @staticmethod
    def _is_ioc_relevant(decompile_modules):
        """Replicate the gating logic from workers.py."""
        return (
            not decompile_modules
            or "all" in decompile_modules
            or "decompilation" in decompile_modules
            or "strings" in decompile_modules
        )

    def test_all_triggers_ioc(self):
        assert self._is_ioc_relevant({"all"}) is True

    def test_decompilation_triggers_ioc(self):
        assert self._is_ioc_relevant({"decompilation"}) is True

    def test_strings_triggers_ioc(self):
        assert self._is_ioc_relevant({"strings"}) is True

    def test_decompilation_and_strings_triggers_ioc(self):
        assert self._is_ioc_relevant({"decompilation", "strings"}) is True

    def test_cfg_only_skips_ioc(self):
        assert self._is_ioc_relevant({"cfg"}) is False

    def test_disassembly_only_skips_ioc(self):
        assert self._is_ioc_relevant({"disassembly"}) is False

    def test_llil_only_skips_ioc(self):
        assert self._is_ioc_relevant({"llil"}) is False

    def test_cfg_and_disassembly_skips_ioc(self):
        assert self._is_ioc_relevant({"cfg", "disassembly"}) is False

    def test_cfg_and_llil_skips_ioc(self):
        assert self._is_ioc_relevant({"cfg", "llil"}) is False

    def test_cfg_and_decompilation_triggers_ioc(self):
        """If decompilation is included alongside cfg, IOC should run."""
        assert self._is_ioc_relevant({"cfg", "decompilation"}) is True

    def test_disassembly_and_strings_triggers_ioc(self):
        """If strings is included alongside disassembly, IOC should run."""
        assert self._is_ioc_relevant({"disassembly", "strings"}) is True

    def test_none_modules_triggers_ioc(self):
        """When decompile_modules is None (default), IOC should run."""
        assert self._is_ioc_relevant(None) is True

    def test_empty_set_triggers_ioc(self):
        """When decompile_modules is empty set, IOC should run (falsy)."""
        assert self._is_ioc_relevant(set()) is True