Kai Shen

189 papers A* 19A 20B 10C 5Misc 3Journal 89Unranked 43
YearRankTypeTitle / Venue / Authors
2026 J jnl
Signal Process.
Tao Cui, Peng Dong, Zhongliang Jing, Kai Shen, Wujun Chen, Baitao Tang
2026 J jnl
CoRR
Tanyu Chen, Tairan Chen, Kai Shen, Zhenghua Bao, Zhihui Zhang, Man Yuan, Yi Shi
2026 J jnl
CoRR
Chenghao Fan, Wen Heng, Bo Li, Sichen Liu, Yuxuan Song, Jing Su, Xiaoye Qu, Kai Shen, Wei Wei
2025 J jnl
IEEE Access
Yongzhen Zhang, Pu Cheng, Kai Shen, Weiming He, Di Nian, Jun Pan
2025 J jnl
CoRR
Titouan Duston, Shuo Xin, Yang Sun, Daoguang Zan, Aoyan Li, Shulin Xin, Kai Shen, Yixiao Chen, Qiming Sun, Ge Zhang, Jiashuo Liu, Huan Zhou, Jingkai Liu, Zhichen Pu, Yuanheng Wang, Bo-Xuan Ge, Xin Tong, Fei Ye, Zhi-Chao Zhao, Wen-Biao Han, Zhoujian Cao, Yueran Zhao, Weiluo Ren, Qingshen Long, Yuxiao Liu, Anni Huang, Yidi Du, Yuanyuan Rong, Jiahao Peng
2025 J jnl
CoRR
Minghe Gao, Juncheng Li, Yuze Lin, Xuqi Liu, Jiaming Ji, Xiaoran Pan, Zihan Xu, Xian Li, Mingjie Li, Wei Ji, Rong Wei, Rui Tang, Qizhou Wang, Kai Shen, Jun Xiao, Qi Wu, Siliang Tang, Yueting Zhuang
2025 J jnl
CoRR
Muhua Zhang, Lei Ma, Ying Wu, Kai Shen, Yongkui Sun, Henry Leung
2025 J jnl
CoRR
Ran Xin, Chenguang Xi, Jie Yang, Feng Chen, Hang Wu, Xia Xiao, Yifan Sun, Shen Zheng, Kai Shen
2025 J jnl
CoRR
Zihan Wang, Siyao Liu, Yang Sun, Hongyan Li, Kai Shen
2025 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Kai Shen, Shiying Li, Yinghe Ding, Zheng Xu, Pengxiang Yang
2025 J jnl
CoRR
Kaihang Pan, Wendong Bu, Yuruo Wu, Yang Wu, Kai Shen, Yunfei Li, Hang Zhao, Juncheng Li, Siliang Tang, Yueting Zhuang
2025 J jnl
CoRR
Jian Yang, Xianglong Liu, Weifeng Lv, Ken Deng, Shawn Guo, Lin Jing, Yizhi Li, Shark Liu, Xianzhen Luo, Yuyu Luo, Changzai Pan, Ensheng Shi, Yingshui Tan, Renshuai Tao, Jiajun Wu, Xianjie Wu, Zhenhe Wu, Daoguang Zan, Chenchen Zhang, Wei Zhang, He Zhu, Terry Yue Zhuo, Kerui Cao, Xianfu Cheng, Jun Dong, Shengjie Fang, Zhiwei Fei, Xiangyuan Guan, Qipeng Guo, Zhiguang Han, Joseph James, Tianqi Luo, Renyuan Li, Yuhang Li, Yiming Liang, Congnan Liu, Jiaheng Liu, Qian Liu, Ruitong Liu, Tyler Loakman, Xiangxin Meng, Chuang Peng, Tianhao Peng, Jiajun Shi, Mingjie Tang, Boyang Wang, Haowen Wang, Yunli Wang, Fanglin Xu, Zihan Xu, Fei Yuan, Ge Zhang, Jiayi Zhang, Xinhao Zhang, Wangchunshu Zhou, Hualei Zhu, King Zhu, Bryan Dai, Aishan Liu, Zhoujun Li, Chenghua Lin, Tianyu Liu, Chao Peng, Kai Shen, Libo Qin, Shuangyong Song, Zizheng Zhan, Jiajun Zhang, Jie Zhang, Zhaoxiang Zhang, Bo Zheng
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yuhui Hu, Yingxin Liu, Kai Shen, Xinye Zhang, Jingyu Shi
2025 J jnl
CoRR
KimiTeam, Ding Ding, Zeqian Ju, Yichong Leng, Songxiang Liu, Tong Liu, Zeyu Shang, Kai Shen, Wei Song, Xu Tan, Heyi Tang, Zhengtao Wang, Chu Wei, Yifei Xin, Xinran Xu, Jianwei Yu, Yutao Zhang, Xinyu Zhou, Y. Charles, Jun Chen, Yanru Chen, Yulun Du, Weiran He, Zhenxing Hu, Guokun Lai, Qingcheng Li, Yangyang Liu, Weidong Sun, Jianzhou Wang, Yuzhi Wang, Yuefeng Wu, Yuxin Wu, Dongchao Yang, Hao Yang, Ying Yang, Zhilin Yang, Aoxiong Yin, Ruibin Yuan, Yutong Zhang, Zaida Zhou
2025 conf
APSIPA
Shifu Xiong, Hengshun Zhou, Kai Shen, Shi Cheng, Hang Chen, Genshun Wan, Kewei Li, Jun Du, Lirong Dai
2025 A* conf
ACM Multimedia
Shifu Xiong, Hang Chen, Shi Cheng, Kai Shen, Hengshun Zhou, Genshun Wan, Chenyue Zhang, Kewei Li, Jun Du, Lirong Dai
2025 J jnl
CoRR
Zeqian Ju, Dongchao Yang, Jianwei Yu, Kai Shen, Yichong Leng, Zhengtao Wang, Xu Tan, Xinyu Zhou, Tao Qin, Xiangyang Li
2025 J jnl
CoRR
Daoguang Zan, Zhirong Huang, Wei Liu, Hanwu Chen, Linhao Zhang, Shulin Xin, Lu Chen, Qi Liu, Xiaojian Zhong, Aoyan Li, Siyao Liu, Yongsheng Xiao, Liangqiang Chen, Yuyu Zhang, Jing Su, Tianyu Liu, Rui Long, Kai Shen, Liang Xiang
2025 J jnl
CoRR
Wendong Bu, Kaihang Pan, Yuze Lin, Jiacheng Li, Kai Shen, Wenqiao Zhang, Juncheng Li, Jun Xiao, Siliang Tang
2025 Misc conf
ICASSP
Kewei Li, Hengshun Zhou, Kai Shen, Yusheng Dai, Jun Du
2025 J jnl
IEEE Trans. Ind. Electron.
Jinwen Wang, Zhihong Deng, Kai Shen, Yuming Bo
2025 J jnl
CoRR
Junhao Wang, Daoguang Zan, Shulin Xin, Siyao Liu, Yurong Wu, Kai Shen
2025 J jnl
CoRR
Yuyu Zhang, Jing Su, Yifan Sun, Chenguang Xi, Xia Xiao, Shen Zheng, Anxiang Zhang, Kaibo Liu, Daoguang Zan, Tao Sun, Jinhua Zhu, Shulin Xin, Dong Huang, Yetao Bai, Lixin Dong, Chao Li, Jianchong Chen, Hanzhi Zhou, Yifan Huang, Guanghan Ning, Xierui Song, Jiaze Chen, Siyao Liu, Kai Shen, Liang Xiang, Yonghui Wu
2025 J jnl
IEEE Trans. Instrum. Meas.
Ping Zhang, Zhihong Deng, Kai Shen, Zhe Li, Zhidong Meng
2025 J jnl
CoRR
Muhua Zhang, Lei Ma, Ying Wu, Kai Shen, Deqing Huang, Henry Leung
2025 J jnl
CoRR
Aoxiong Yin, Kai Shen, Yichong Leng, Xu Tan, Xinyu Zhou, Juncheng Li, Siliang Tang
2025 J jnl
CoRR
Kaihang Pan, Yang Wu, Wendong Bu, Kai Shen, Juncheng Li, Yingting Wang, Yunfei Li, Siliang Tang, Jun Xiao, Fei Wu, Hang Zhao, Yueting Zhuang
2024 J jnl
IEEE Internet Things J.
Kai Shen, Yuelun Li, Tingxin Liu, Jianwen Zuo, Ziao Yang
2024 J jnl
CCF Trans. High Perform. Comput.
Hang Cao, Cheng Xu, Yunqi Han, Muhui Lin, Kai Shen, Geng Wang, Jinhu Li, Xiangzheng Sun, Ronghui He, Liang You, Hang Yang, Xiantao Zhang
2024 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Kai Shen, Lingfei Wu, Siliang Tang, Fangli Xu, Bo Long, Yueting Zhuang, Jian Pei
2024 J jnl
CoRR
Kai Shen, Lingfei Wu, Siliang Tang, Fangli Xu, Bo Long, Yueting Zhuang, Jian Pei
2024 J jnl
IEEE Trans. Mob. Comput.
Dayou Zhang, Hao Zhu, Kai Shen, Dan Wang, Fangxin Wang
2024 J jnl
Signal Process.
Kai Shen, Chengxi Zhang, Peng Dong, Zhongliang Jing, Henry Leung
2024 conf
ROBIO
Yuxin Su, Yi Lin, Chunhong Yan, Yice Zhang, Lei Ma, Muhua Zhang, Kai Shen, Yongkui Sun
2024 J jnl
CoRR
Yao Cheng, Jianfeng Chen, Jie Chen, Li Chen, Liyu Chen, Wentao Chen, Zhengyu Chen, Shijie Geng, Aoyan Li, Bo Li, Bowen Li, Linyi Li, Boyi Liu, Jerry Liu, Kaibo Liu, Qi Liu, Shukai Liu, Siyao Liu, Tianyi Liu, Tingkai Liu, Yongfei Liu, Rui Long, Jing Mai, Guanghan Ning, Z. Y. Peng, Kai Shen, Jiahao Su, Jing Su, Tao Sun, Yifan Sun, Yunzhe Tao, Guoyin Wang, Siwei Wang, Xuwu Wang, Yite Wang, Zihan Wang, Jinxiang Xia, Liang Xiang, Xia Xiao, Yongsheng Xiao, Chenguang Xi, Shulin Xin, Jingjing Xu, Shikun Xu, Hongxia Yang, Jack Yang, Yingxiang Yang, Jianbo Yuan, Jun Zhang, Yufeng Zhang, Yuyu Zhang, Shen Zheng, He Zhu, Ming Zhu
2024 conf
M2VIP
Muhua Zhang, Lei Ma, Kai Shen, Yongkui Sun
2024 B conf
WiOpt
Shuo Huang, Zhiyuan Wang, Wenhao Lu, Kai Shen, Jiayi Zhang, Shan Zhang, Hongbin Luo
2024 J jnl
IEEE Trans. Consumer Electron.
Zeyu Wang, Kai Shen, Dong Wang, Haibin Shen, Kejie Huang
2024 J jnl
Appl. Soft Comput.
Yingxin Liu, Yuhui Hu, Kai Shen, Jiatai Qiu, Konstantin A. Neusypin
2024 A* conf
ICLR
Kai Shen, Zeqian Ju, Xu Tan, Eric Liu, Yichong Leng, Lei He, Tao Qin, Sheng Zhao, Jiang Bian
2024 A* conf
ICML
Zeqian Ju, Yuancheng Wang, Kai Shen, Xu Tan, Detai Xin, Dongchao Yang, Eric Liu, Yichong Leng, Kaitao Song, Siliang Tang, Zhizheng Wu, Tao Qin, Xiangyang Li, Wei Ye, Shikun Zhang, Jiang Bian, Lei He, Jinyu Li, Sheng Zhao
2024 J jnl
CoRR
Zeqian Ju, Yuancheng Wang, Kai Shen, Xu Tan, Detai Xin, Dongchao Yang, Yanqing Liu, Yichong Leng, Kaitao Song, Siliang Tang, Zhizheng Wu, Tao Qin, Xiang-Yang Li, Wei Ye, Shikun Zhang, Jiang Bian, Lei He, Jinyu Li, Sheng Zhao
2024 conf
ICTON
Wang Na, Jiazhen Zhang, Fan Cui, Xiao Li, Kai Shen, Jiang Wu, Guifu Zou, Hao Xu
2024 J jnl
CoRR
Kewei Li, Hengshun Zhou, Kai Shen, Yusheng Dai, Jun Du
2024 A* conf
ICLR
Yichong Leng, Zhifang Guo, Kai Shen, Zeqian Ju, Xu Tan, Eric Liu, Yufei Liu, Dongchao Yang, Leying Zhang, Kaitao Song, Lei He, Xiangyang Li, Sheng Zhao, Tao Qin, Jiang Bian
2024 J jnl
CoRR
Detai Xin, Xu Tan, Kai Shen, Zeqian Ju, Dongchao Yang, Yuancheng Wang, Shinnosuke Takamichi, Hiroshi Saruwatari, Shujie Liu, Jinyu Li, Sheng Zhao
2024 J jnl
Comput. Electron. Agric.
Caiwang Zheng, Amr H. Abd-Elrahman, Vance Whitaker, Xu Wang, Cheryl Dalid, Kai Shen
2024 conf
ACL (1)
Aoxiong Yin, Haoyuan Li, Kai Shen, Siliang Tang, Yueting Zhuang
2024 J jnl
CoRR
Aoxiong Yin, Haoyuan Li, Kai Shen, Siliang Tang, Yueting Zhuang
2024 J jnl
IEEE Trans. Mob. Comput.
Dayou Zhang, Lai Wei, Kai Shen, Hao Zhu, Dan Wang, Fangxin Wang
2023 J jnl
CoRR
Kai Shen, Junliang Guo, Xu Tan, Siliang Tang, Rui Wang, Jiang Bian
2023 J jnl
Signal Process.
Tao Cui, Zhongliang Jing, Peng Dong, Kai Shen
2023 J jnl
Pattern Recognit. Lett.
Kai Shen, Yu Zhuang, Yixuan Chen, Siqi Zuo, Tong Liu
2023 conf
KSEM (1)
Kai Shen, Haoyu Wang, Arin Chaudhuri, Zohreh Asgharzadeh
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Kai Shen, Chengxi Zhang, Peng Dong, Zhongliang Jing, Henry Leung
2023 J jnl
CoRR
Charlie T. Tran, Kai Shen, Kevin Liu, Ruogu Fang
2023 J jnl
Found. Trends Mach. Learn.
Lingfei Wu, Yu Chen, Kai Shen, Xiaojie Guo, Hanning Gao, Shucheng Li, Jian Pei, Bo Long
2023 J jnl
IEEE Netw.
Kai Shen, Baochun Li
2023 J jnl
CoRR
Seo Jin Park, Ramesh Govindan, Kai Shen, David E. Culler, Fatma Özcan, Geon-Woo Kim, Hank Levy
2023 J jnl
CoRR
Kai Shen, Zeqian Ju, Xu Tan, Yanqing Liu, Yichong Leng, Lei He, Tao Qin, Sheng Zhao, Jiang Bian
2023 J jnl
IEEE Internet Things J.
Kai Shen, Jianwen Zuo, Yuelun Li, Siqi Zuo, Wenjun Guo
2023 J jnl
CoRR
Yichong Leng, Zhifang Guo, Kai Shen, Xu Tan, Zeqian Ju, Yanqing Liu, Yufei Liu, Dongchao Yang, Leying Zhang, Kaitao Song, Lei He, Xiang-Yang Li, Sheng Zhao, Tao Qin, Jiang Bian
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Kai Shen, Tingxin Liu, Yuelun Li, Ning Liu, Wenhao Qi
2023 J jnl
Comput. Aided Civ. Infrastructure Eng.
Yadong Xue, Yupeng Cao, Mingliang Zhou, Feng Zhang, Kai Shen, Fei Jia
2023 A* conf
INFOCOM
Kai Shen, Dayou Zhang, Zi Zhu, Lei Zhang, Fangxin Wang, Dan Wang
2022 J jnl
Enterp. Model. Inf. Syst. Archit.
Daniel Amyot, Okhaide Akhigbe, Malak Baslyman, Sepideh Ghanavati, Mahdi Ghasemi, Jameleddine Hassine, Lysanne Lessard, Gunter Mussbacher, Kai Shen, Eric Yu
2022 J jnl
IEEE Trans. Signal Process.
Kai Shen, Chengxi Zhang, Peng Dong, Zhongliang Jing, Henry Leung
2022 J jnl
IEEE Trans. Cybern.
Kai Shen, Peng Dong, Zhongliang Jing, Henry Leung
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yuhui Hu, Kai Shen, Konstantin A. Neusypin, Andrey V. Proletarsky, Maria Selezneva
2022 J jnl
IEEE Trans. Instrum. Meas.
Jinwen Wang, Zhihong Deng, Zhidong Meng, Kai Shen
2022 A* conf
EMNLP
Kai Shen, Yichong Leng, Xu Tan, Siliang Tang, Yuan Zhang, Wenjie Liu, Edward Lin
2022 J jnl
CoRR
Kai Shen, Yichong Leng, Xu Tan, Siliang Tang, Yuan Zhang, Wenjie Liu, Edward Lin
2022 J jnl
Sci. China Inf. Sci.
Wei Su, Xueqiao Wang, Ge Chen, Kai Shen
2022 J jnl
CoRR
Xueying Zhang, Kai Shen, Chi Zhang, Xiaochuan Fan, Yun Xiao, Zhen He, Bo Long, Lingfei Wu
2022 A conf
ICME
Dayou Zhang, Kai Shen, Fangxin Wang, Dan Wang, Jiangchuan Liu
2022 J jnl
IEEE Trans. Instrum. Meas.
Jinwen Wang, Zhihong Deng, Kai Shen
2021 J jnl
CoRR
Lingfei Wu, Yu Chen, Kai Shen, Xiaojie Guo, Hanning Gao, Shucheng Li, Jian Pei, Bo Long
2021 C conf
ACC
Bowen Mu, Xuejiao Yang, Kai Shen, Joseph K. Scott
2021 A* conf
NeurIPS
Kai Shen, Lingfei Wu, Siliang Tang, Yueting Zhuang, Zhen He, Zhuoye Ding, Yun Xiao, Bo Long
2021 conf
ICMTEL (1)
Lianhuan Zhu, Wei Wei, Weiyang Zhu, Cansong Ding, Kai Shen, Guanhua Fu
2021 J jnl
IEEE Trans. Ind. Electron.
Chaoyang Zhai, Meiling Wang, Yi Yang, Kai Shen
2021 J jnl
Autom.
Kai Shen, Dillard Robertson, Joseph K. Scott
2020 J jnl
CoRR
Tong Yang, Kai Shen, Sixuan He, Enyu Li, Peter Sun, Lin Zuo, Jiayue Hu, Yiwen Mo, Weiwei Zhang, Pingying Chen, Haonan Zhang, Jingxue Chen, Yu Guo
2020 J jnl
IEEE Access
Jinran Wang, Peng Dong, Kai Shen, Xun Song, Xiaodong Wang
2020 J jnl
Math. Control. Signals Syst.
Kai Shen, Joseph K. Scott
2020 A* conf
IJCAI
Kai Shen, Lingfei Wu, Fangli Xu, Siliang Tang, Jun Xiao, Yueting Zhuang
2020 J jnl
IEEE Trans. Mob. Comput.
Meng Zhu, Kai Shen
2020 J jnl
IEEE Trans. Ind. Electron.
Kai Shen, Meiling Wang, Mengyin Fu, Yi Yang, Zhang Yin
2020 J jnl
CoRR
Wei Su, Xueqiao Wang, Ge Chen, Kai Shen
2019 conf
USENIX ATC
Mohammad Hedayati, Spyridoula Gravani, Ethan Johnson, John Criswell, Michael L. Scott, Kai Shen, Mike Marty
2019 conf
USENIX ATC
Mohammad Hedayati, Kai Shen, Michael L. Scott, Mike Marty
2019 J jnl
IEEE Trans. Cybern.
Peng Dong, Zhongliang Jing, Henry Leung, Kai Shen, Minzhe Li
2019 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Peng Dong, Zhongliang Jing, Henry Leung, Kai Shen, Minzhe Li
2018 J jnl
Sci. China Inf. Sci.
Peng Dong, Zhongliang Jing, Kai Shen, Minzhe Li
2018 J jnl
IEEE Access
Jin Zheng, Zhi Zhang, Qiuhao Tao, Kai Shen, Yue Wang
2018 C conf
FUSION
Kai Shen, Zhongliang Jing, Peng Dong, Yinshuai Sun, Jiyuan Cai
2018 conf
CDC
Kai Shen, Joseph K. Scott
2018 J jnl
Frontiers Comput. Sci.
Qi Zhu, Bo Wu, Xipeng Shen, Kai Shen, Li Shen, Zhiying Wang
2018 J jnl
Signal Process.
Kai Shen, Zhongliang Jing, Peng Dong
2018 J jnl
Signal Process.
Peng Dong, Zhongliang Jing, Henry Leung, Kai Shen, Jinran Wang
2018 C conf
ACC
Kai Shen, Joseph K. Scott
2017 J jnl
IEEE Signal Process. Lett.
Kai Shen, Zhongliang Jing, Peng Dong
2017 conf
USENIX ATC
Ari B. Hayes, Lingda Li, Mohammad Hedayati, Jia-Huan He, Eddy Z. Zhang, Kai Shen
2017 J jnl
Comput. Chem. Eng.
Kai Shen, Joseph K. Scott
2017 J jnl
Frontiers Comput. Sci.
Qi Zhu, Bo Wu, Xipeng Shen, Kai Shen, Li Shen, Zhiying Wang
2017 J jnl
IEEE Trans. Autom. Control.
Peng Dong, Zhongliang Jing, Henry Leung, Kai Shen
2016 conf
Internetware
Kai Shen, Renke Wu, Haojie Zhou, Haibo Yu, Hao Zhong
2016 conf
USENIX ATC
Sharanyan Srikanthan, Sandhya Dwarkadas, Kai Shen
2016 conf
USENIX ATC
Meng Zhu, Kai Shen
2016 conf
Trustcom/BigDataSE/ISPA
Renke Wu, Linpeng Huang, Peng Yu, Kai Shen, Qiuwei Shi, Haojie Zhou
2016 A conf
FAST
Zhuan Chen, Kai Shen
2015 conf
USENIX ATC
Sharanyan Srikanthan, Sandhya Dwarkadas, Kai Shen
2015 A conf
HotOS
Qi Zhu, Meng Zhu, Bo Wu, Xipeng Shen, Kai Shen, Zhiying Wang
2014 A* conf
ASPLOS
Konstantinos Menychtas, Kai Shen, Michael L. Scott
2014 A conf
FAST
Kai Shen, Stan Park, Meng Zhu
2013 conf
EMBC
Yufeng Zhang, Lian Gao, Kai Shen, Kexin Zhang, Jine Yan, Wei Cheng, Junhua Zhang
2013 C conf
DASC
Xueqin Zhang, Kai Shen, Chengguang Xu, Kaifang Wang
2013 conf
USENIX ATC
Konstantinos Menychtas, Kai Shen, Michael L. Scott
2013 A conf
EuroSys
Stan Park, Terence Kelly, Kai Shen
2013 conf
USENIX ATC
Kai Shen, Stan Park
2013 A* conf
ASPLOS
Kai Shen, Arrvindh Shriraman, Sandhya Dwarkadas, Xiao Zhang, Zhuan Chen
2013 conf
ADMA (1)
Yunqing Wen, Xiang Zhang, Kai Shen, Peng Wang
2012 B conf
ICPP
Xiao Zhang, Rongrong Zhong, Sandhya Dwarkadas, Kai Shen
2012 conf
NSDR
Amal Fahad, Zhuan Chen, Kai Shen, Jeffrey Bigham, Assmaa Fahad
2012 B conf
CCGRID
Xiaoya Xiang, Bin Bao, Chen Ding, Kai Shen
2012 A conf
FAST
Stan Park, Kai Shen
2012 A* conf
SIGMETRICS
Kai Shen, Arrvindh Shriraman, Sandhya Dwarkadas, Xiao Zhang
2012 conf
SoCC
Amal Fahad, Tolga Soyata, Tai Wang, Gaurav Sharma, Wendi B. Heinzelman, Kai Shen
2010 conf
USENIX ATC
Xin Li, Michael C. Huang, Kai Shen, Lingkun Chu
2010 J jnl
CoRR
Dongning Guo, Jun Luo, Lei Zhang, Kai Shen
2010 B conf
MASCOTS
Christopher Stewart, Kai Shen, Arun Iyengar, Jian Yin
2010 A* conf
ASPLOS
Kai Shen
2009 C conf
CLUSTER
Stan Park, Kai Shen
2009 conf
USENIX ATC
Xiao Zhang, Sandhya Dwarkadas, Kai Shen
2009 conf
SIGMETRICS/Performance
Kai Shen, Christopher Stewart, Chuanpeng Li, Xin Li
2009 A conf
EuroSys
Xiao Zhang, Sandhya Dwarkadas, Kai Shen
2008 conf
USENIX ATC
Christopher Stewart, Terence Kelly, Alex Zhang, Kai Shen
2008 conf
GCC
Shuling Wang, Shoubao Yang, Kai Shen, Lihua Xie
2008 conf
LADIS
Christopher Stewart, Kai Shen, Arun Iyengar, Jian Yin
2008 A conf
ICDCS
Ming Zhong, Kai Shen, Joel I. Seiferas
2008 conf
IISWC
Christopher Stewart, Matthew Leventi, Kai Shen
2008 A* conf
ASPLOS
Kai Shen, Ming Zhong, Sandhya Dwarkadas, Chuanpeng Li, Christopher Stewart, Xiao Zhang
2008 B conf
MASCOTS
Terence Kelly, Kai Shen, Alex Zhang, Christopher Stewart
2008 B conf
SPAA
Kai Shen, Alex Zhang, Terence Kelly, Christopher Stewart
2008 A* conf
PODC
Ming Zhong, Pin Lu, Kai Shen, Joel I. Seiferas
2008 conf
ChinaGrid
Xiaoqian Liu, Shoubao Yang, Leitao Guo, Kai Shen
2008 A conf
EuroSys
Ming Zhong, Kai Shen, Joel I. Seiferas
2008 J jnl
IEEE Trans. Computers
Ming Zhong, Kai Shen, Joel I. Seiferas
2007 conf
USENIX ATC
Xin Li, Kai Shen, Michael C. Huang, Lingkun Chu
2007 conf
GCC
Kai Shen, Shoubao Yang, Wei Chen, Xiaoqian Liu, Bin Wu
2007 A conf
EuroSys
Chuanpeng Li, Kai Shen, Athanasios E. Papathanasiou
2007 B conf
ICPP
Pin Lu, Kai Shen
2007 A* conf
PODC
Ming Zhong, Kai Shen, Joel I. Seiferas
2007 A conf
HotOS
Xiao Zhang, Sandhya Dwarkadas, Girts Folkmanis, Kai Shen
2007 conf
Experimental Computer Science
Chuanpeng Li, Chen Ding, Kai Shen
2007 conf
GCC
Liangmin Guo, Shoubao Yang, Leitao Guo, Kai Shen, Weina Lu
2007 conf
USENIX ATC
Pin Lu, Kai Shen
2006 J jnl
J. Comput. Res. Dev.
Ying Chen, Shoubao Yang, Leitao Guo, Kai Shen
2006 conf
HotDep
Christopher Stewart, Ming Zhong, Kai Shen, Thomas O'Neill
2006 J jnl
J. Parallel Distributed Comput.
Kai Shen
2006 conf
IPTPS
Ming Zhong, Kai Shen
2006 A conf
IPDPS
Chen Ding, Sandhya Dwarkadas, Michael C. Huang, Kai Shen, John B. Carter
2006 J jnl
ACM SIGOPS Oper. Syst. Rev.
Ming Zhong, Kai Shen
2006 A conf
SIGCSE
Peter DeRosa, Kai Shen, Christopher Stewart, Jonathan Pearson
2006 conf
GCC
Kai Shen, Shoubao Yang, Minghua Tian, Pengzhan Liu
2005 conf
WebDB
Ming Zhong, Justin Moore, Kai Shen, Amy L. Murphy
2005 A* conf
SOSP
Christopher Stewart, Kai Shen
2005 A* conf
INFOCOM
Lingkun Chu, Kai Shen, Hong Tang, Tao Yang, Jingyu Zhou
2005 conf
ITCC (2)
Ying Chen, Shoubao Yang, Leitao Guo, Pengzhan Liu, Kai Shen
2005 A conf
FAST
Kai Shen, Ming Zhong, Chuanpeng Li
2005 A conf
FAST
Chuanpeng Li, Kai Shen
2005 A* conf
INFOCOM
Ming Zhong, Kai Shen, Joel I. Seiferas
2005 A conf
ICS
Kai Shen
2005 Misc conf
NSDI
Christopher Stewart, Kai Shen
2004 conf
WCW
Kai Shen, Yuan Sun
2004 J jnl
IEEE Distributed Syst. Online
Christopher Stewart, Kai Shen, Sandhya Dwarkadas, Michael L. Scott, Jian Yin
2004 Misc conf
NSDI
Kai Shen
2004 A conf
SC
Kai Shen, Lingkun Chu, Tao Yang
2003 J jnl
IEEE Trans. Parallel Distributed Syst.
Kai Shen, Tao Yang, Lingkun Chu
2003 B conf
PPoPP
Lingkun Chu, Hong Tang, Tao Yang, Kai Shen
2002 A conf
IPDPS
Kai Shen, Tao Yang, Lingkun Chu
2002 A* conf
OSDI
Kai Shen, Hong Tang, Tao Yang, Lingkun Chu
2001 conf
USITS
Kai Shen, Tao Yang, Lingkun Chu, JoAnne Holliday, Douglas A. Kuschner, Huican Zhu
2000 J jnl
ACM Trans. Program. Lang. Syst.
Hong Tang, Kai Shen, Tao Yang
1999 A conf
ALENEX
Anurag Acharya, Huican Zhu, Kai Shen
1999 A conf
SC
Kai Shen, Hong Tang, Tao Yang
1999 B conf
PPoPP
Hong Tang, Kai Shen, Tao Yang
1999 conf
PP
Bin Jiang, Steven Richman, Kai Shen, Tao Yang
1998 B conf
SPAA
Kai Shen, Xiangmin Jiao, Tao Yang
redb/extractors/decompiler/bninja/analysis/disassembly.py
← Index redb/extractors/decompiler/bninja/analysis/disassembly.py python
import re
import time

import binaryninja
from binaryninja.enums import (
    InstructionTextTokenType,
)

# Support both package and standalone imports
try:
    from ..function_type import FunctionTypeAnalysis
    from ..utils.hashes import calculate_sha256
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256


class DisassemblyAnalysis:
    INVALID_STACK_SIZE = -1

    def __init__(self, arch, function, bv, logger):
        self.arch = arch
        self.function = function
        self.bv = bv
        self.logger = logger
        if self.function is not None and hasattr(self.function, "instructions"):
            self.instructions = self.function.instructions
        else:
            self.instructions = []
        self.errors = []
        return

    def log_error(
        self, message, function_name, address, exception=None, error_location="unknown"
    ):
        """Log an error during processing."""
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        # Add to errors list
        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def get_json(self):
        try:
            # Build disassembly string and normalized versions
            disassembly_builder = [[], []]  # Address and instruction text

            # Create a dictionary mapping addresses to instruction tokens
            instr_tokens_by_addr = {}
            for instr_tokens, addr in self.instructions:
                instr_tokens_by_addr[addr] = instr_tokens

            addresses = sorted(instr_tokens_by_addr.keys())
            for address in addresses:
                # Original disassembly with addresses
                # instr_tokens, address = instruction
                instr_tokens = instr_tokens_by_addr[address]
                disassembly_builder[0].append(address)
                disassembly_builder[1].append("".join(map(str, instr_tokens)))

            # Join with newlines
            disassembly_str = "\n".join(disassembly_builder[1])
            disassembly_with_addresses = "\n".join(
                f"{hex(address)}: {instr_text}"
                for address, instr_text in zip(
                    disassembly_builder[0], disassembly_builder[1], strict=False
                )
            )

            disassembly_json = {
                "disassembled_function_hash": calculate_sha256(disassembly_str),
                "disassembled_function": disassembly_with_addresses,
                "disassembled_function_no_addresses": disassembly_str,
                "disassembled_function_name": self.function.name,
                "disassembled_function_address": self.function.start,
                "instructions_count": len(instr_tokens_by_addr.keys()),
                "function_type": FunctionTypeAnalysis(self.function)
                .get_function_type()
                .name,
            }

            # Add additional metrics
            type_frequencies = self.collect_instruction_types()
            disassembly_json["instructions_types"] = list(type_frequencies.keys())
            disassembly_json["control_flow_count"] = (
                self.count_control_flow_instructions()
            )
            disassembly_json["memory_access_pattern"] = self.collect_memory_patterns()
            disassembly_json["register_usage"] = self.collect_register_usage()
            disassembly_json["data_references_count"] = self.count_data_references()
            disassembly_json["max_block_size"] = self.compute_max_block_size()
            disassembly_json["num_calls"] = self.compute_num_calls()
            disassembly_json["stack_size"] = self.estimate_stack_size()

            return disassembly_json, self.errors

        except Exception as e:
            self.log_error(
                "Failed to collect instruction types",
                self.function.name,
                self.function.start,
                e,
                "collect_instruction_types",
            )
            raise ValueError(e) from e

    def collect_instruction_types(self):
        """Collect instruction type frequencies from a function."""
        type_frequencies = {}

        try:
            # Iterate through all instructions in the function
            for instruction in self.instructions:
                instr_tokens = instruction[0]  # Get the instruction tokens

                # Extract the mnemonic from the instruction tokens
                mnemonic = None
                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.InstructionToken:
                        mnemonic = token.text
                        break

                if not mnemonic:
                    continue

                # Use normalize_opcode to get standardized opcode
                normalized = self.normalize_opcode(mnemonic)

                # Get category from opcode_categories or use the instruction type directly
                category = self.arch.opcode_categories.get(normalized)
                if category:
                    self._increment_frequency(type_frequencies, category)

        except Exception as e:
            self.log_error(
                "Failed to collect instruction types",
                self.function.name,
                self.function.start,
                e,
                "collect_instruction_types",
            )

        return type_frequencies

    def normalize_opcode(self, opcode):
        return opcode.upper()

    def collect_memory_patterns(self):
        """Collect memory access patterns from a function."""
        patterns = []
        try:
            for instruction in self.instructions:
                instr_tokens = instruction[0]

                # We need to capture memory operands between BeginMemoryOperandToken and EndMemoryOperandToken
                in_memory_operand = False
                memory_operand_text = ""

                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.BeginMemoryOperandToken:
                        in_memory_operand = True
                        memory_operand_text = ""
                    elif token.type == InstructionTextTokenType.EndMemoryOperandToken:
                        in_memory_operand = False

                        # Process the captured memory operand text
                        if memory_operand_text:
                            # Categorize memory access pattern
                            if (
                                "+" in memory_operand_text
                                and "*" in memory_operand_text
                            ):
                                if "MEM_SCALED_INDEX" not in patterns:
                                    patterns.append("MEM_SCALED_INDEX")
                            elif (
                                "+" in memory_operand_text or "-" in memory_operand_text
                            ):
                                if "MEM_BASE_OFFSET" not in patterns:
                                    patterns.append("MEM_BASE_OFFSET")
                            else:
                                if "MEM_DIRECT" not in patterns:
                                    patterns.append("MEM_DIRECT")

                            # Check for stack accesses
                            if any(
                                reg in memory_operand_text
                                for reg in ["SP", "BP", "ESP", "EBP", "RSP", "RBP"]
                            ):
                                if "MEM_STACK" not in patterns:
                                    patterns.append("MEM_STACK")
                            # Check for string operations
                            elif (
                                any(
                                    reg in memory_operand_text
                                    for reg in ["SI", "DI", "ESI", "EDI", "RSI", "RDI"]
                                )
                                and "MEM_STRING" not in patterns
                            ):
                                patterns.append("MEM_STRING")
                    elif in_memory_operand:
                        # Accumulate token text while inside a memory operand
                        memory_operand_text += token.text
        except Exception as e:
            self.log_error(
                "Failed to collect memory patterns",
                self.function.name,
                self.function.start,
                e,
                "collect_memory_patterns",
            )
        return patterns

    def collect_register_usage(self):
        """Collect register usage from a function."""
        registers = []
        try:
            # Define register groups we're interested in tracking
            register_groups = {
                "GPR": [
                    "RAX",
                    "RBX",
                    "RCX",
                    "RDX",
                    "R9",
                    "R10",
                    "R11",
                    "R12",
                    "R13",
                    "R14",
                    "R15",
                    "EAX",
                    "EBX",
                    "ECX",
                    "EDX",
                    "R9D",
                    "R10D",
                    "R11D",
                    "R12D",
                    "R13D",
                    "R14D",
                    "AX",
                    "BX",
                    "CX",
                    "DX",
                ],
                "GPR_INDEX": ["RSI", "RDI", "ESI", "EDI", "SI", "DI"],
                "GPR_STACK": ["RSP", "RBP", "ESP", "EBP", "SP", "BP"],
                "SIMD": ["XMM", "YMM", "ZMM"],
                "FPU": ["ST", "ST0", "ST1", "ST2", "ST3", "ST4", "ST5", "ST6", "ST7"],
                "FLAGS": ["FLAGS", "EFLAGS", "RFLAGS"],
                "CONTROL_REGISTER": ["CR0", "CR2", "CR3", "CR4", "CR8"],
                "DEBUG_REGISTER": ["DR0", "DR1", "DR2", "DR3", "DR6", "DR7"],
            }

            # Extract registers from instructions
            for instruction in self.instructions:
                instr_tokens = instruction[0]
                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.RegisterToken:
                        reg = token.text.upper()
                        # Check which group this register belongs to
                        for group, regs in register_groups.items():
                            # if any(r in reg for r in regs) or any(reg.startswith(r) for r in regs):
                            if any(reg == r or reg.startswith(r) for r in regs):
                                if group not in registers:
                                    registers.append(group)
                                break
        except Exception as e:
            self.log_error(
                "Failed to collect register usage",
                self.function.name,
                self.function.start,
                e,
                "collect_register_usage",
            )
        return registers

    def count_data_references(self):
        """Count the number of data references in a function."""
        count = 0
        try:

            if self.function.mlil is None:
                return 0

            for block in self.function.mlil:
                for instr in block:
                    instr_str = str(instr)
                    logged = False
                    src = None

                    # Check for constant dereferencing or symbolic refs
                    if hasattr(instr, "src"):
                        src = instr.src
                        if isinstance(
                            src,
                            (
                                binaryninja.mediumlevelil.MediumLevelILConstPtr,
                                binaryninja.mediumlevelil.MediumLevelILConst,
                            ),
                        ):
                            count += 1
                            logged = True

                    # Check full string for hardcoded addresses or symbol-like tokens
                    if re.search(r"\b0x[0-9A-Fa-f]{3,}\b", instr_str) and not logged:
                        count += 1
                        logged = True

                    if "_" in instr_str and not logged:
                        count += 1
                        logged = True

                    # Only check for MediumLevelILConstPtr if src exists
                    if src is not None and isinstance(
                        src, binaryninja.mediumlevelil.MediumLevelILConstPtr
                    ):
                        addr = src.constant
                        # Check if address is in data sections
                        segment = self.bv.get_segment_at(addr)
                        if segment and segment.writable:
                            # print(f"[{function.name}] Matched data section reference in: {instr_str}")
                            count += 1
                            logged = True
        except Exception as e:
            self.logger.warning(
                f"Failed to use MLIL for counting data references in {self.function.name} at {self.function.start}: {e}"
            )
        return count

    def compute_max_block_size(self):
        """Compute the maximum basic block size in a function."""
        max_size = 0
        if self.function is None:
            return 0

        for block in self.function.basic_blocks:
            try:
                # Count instructions in this block using the direct length approach
                # This avoids UTF-8 decoding issues entirely
                block_size = block.instruction_count
                max_size = max(max_size, block_size)
            except Exception as e:
                self.log_error(
                    f"[HandledError] computing max block size: {e}",
                    self.function.name,
                    self.function.start,
                    e,
                    "compute_max_block_size",
                )
        return max_size

    def count_control_flow_instructions(self):
        """Count the number of control flow instructions in a function."""
        count = 0
        try:
            for instruction in self.instructions:
                instr_tokens = instruction[0]
                if self.arch.is_control_flow_instruction(instr_tokens):
                    count += 1
        except Exception as e:
            self.log_error(
                "Failed to count control flow instructions",
                self.function.name,
                self.function.start,
                e,
                "count_control_flow_instructions",
            )
        return count

    def compute_num_calls(self) -> int:
        """Compute the number of call instructions in a function."""
        num_calls = 0
        try:
            for instruction in self.instructions:
                instr_tokens = instruction[0]
                # Extract the mnemonic
                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.InstructionToken:
                        if token.text.upper() == "CALL":
                            num_calls += 1
                        break
        except Exception as e:
            self.log_error(
                "Failed to compute number of calls",
                self.function.name,
                self.function.start,
                e,
                "compute_num_calls",
            )
        return num_calls

    def _increment_frequency(self, frequencies, type_name):
        """Increment the frequency count for an instruction type."""
        if type_name in frequencies:
            frequencies[type_name] += 1
        else:
            frequencies[type_name] = 1

    def estimate_stack_size(self):
        """Estimate the stack size used by a function."""
        try:
            # Binary Ninja provides a stack adjustment value for functions
            # Need to convert OffsetWithConfidence to a plain integer
            stack_adjust = self.function.stack_adjustment
            if hasattr(stack_adjust, "value"):  # Handle OffsetWithConfidence objects
                return stack_adjust.value
            return stack_adjust
        except Exception as e:
            self.log_error(
                "Failed to estimate stack size",
                self.function.name,
                self.function.start,
                e,
                "estimate_stack_size",
            )
            return self.INVALID_STACK_SIZE