Wei-Kuan Shih

201 papers A* 8A 16B 20C 9Misc 14Journal 81Unranked 52
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Yi-Hua Chen, Wei-Chun Cheng, Yun-Chih Chen, Wei-Kuan Shih, Yuan-Hao Chang
2025 J jnl
ACM Trans. Embed. Comput. Syst.
Shih-Wen Hsu, Yen-Ting Chen, Kam-yiu Lam, Yuan-Hao Chang, Wei-Kuan Shih, Han-Chieh Chao
2025 conf
NVMSA
Xin Liu, Yun-Shan Hsieh, Po-Chun Huang, Wei-Kuan Shih, Yuan-Hao Chang
2025 conf
RACS
Yi-Hua Chen, Yu-Pei Liang, Shuo-Han Chen, Tse-Wei Lee, Wei-Kuan Shih, Yuan-Hao Chang
2025 conf
RACS
Yi-Syuan Lin, Qi-Cheng Wu, Chih-Xuan Shen, Yu-Pei Liang, Wei-Kuan Shih, Yuan-Hao Chang
2024 Misc conf
SAC
Yi-Syuan Lin, Yu-Pei Liang, Yuan-Hao Chang, Wei-Kuan Shih, Wen Sheng Lim
2024 conf
APCCAS
Zih-Cing Pan, Yi-Chao Shih, Xin Liu, Yu-Pei Liang, Yuan-Hao Chang, Wei-Kuan Shih
2024 A conf
ICS
Zhen-Yang Guo, Ji-Min Chen, Shuo-Han Chen, Wei-Kuan Shih, Chuan-Ming Liu, Yuan-Hao Chang
2024 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Shin-Ting Wu, Pin-Jung Chen, Po-Chun Huang, Wei-Kuan Shih, Yuan-Hao Chang
2024 conf
APCCAS
Che-Min Chen, Yi-Chao Shih, Xin Liu, Wei-Kuan Shih, Tseng-Yi Chen
2024 Misc conf
SAC
Kun-Chi Chiang, Yung-Chun Li, Wei-Chen Wang, Wei-Kuan Shih
2024 conf
APCCAS
Yi-Hua Chen, Pin-Jung Chen, Yu-Pei Liang, Yuan-Hao Chang, Wei-Kuan Shih
2023 conf
ISOCC
Yi-Syuan Lin, Yu-Pei Liang, Yu-Shan Yen, Yen-Ting Chen, Wei-Kuan Shih, Yuan-Hao Chang
2023 J jnl
IEEE Trans. Computers
Gaddisa Olani Ganfure, Chun-Feng Wu, Yuan-Hao Chang, Wei-Kuan Shih
2023 J jnl
ACM Trans. Embed. Comput. Syst.
Yi-Han Lien, Yen-Ting Chen, Yuan-Hao Chang, Yu-Pei Liang, Wei-Kuan Shih
2023 J jnl
IEEE Trans. Emerg. Top. Comput.
Yun-Shan Hsieh, Po-Chun Huang, Yuan-Hao Chang, Bo-Jun Chen, Wang Kang, Wei-Kuan Shih
2023 A conf
ICCAD
Kai-Ting Weng, Yun-Shan Hsieh, Yen-Ting Chen, Yu-Pei Liang, Yuan-Hao Chang, Po-Chun Huang, Wei-Kuan Shih
2023 J jnl
IEEE Trans. Inf. Forensics Secur.
Gaddisa Olani Ganfure, Chun-Feng Wu, Yuan-Hao Chang, Wei-Kuan Shih
2023 conf
ASP-DAC
Syue-Wei Lu, Shuo-Han Chen, Yu-Pei Liang, Yuan-Hao Chang, Kang Wang, Tseng-Yi Chen, Wei-Kuan Shih
2023 J jnl
ACM Trans. Embed. Comput. Syst.
Shin-Ting Wu, Liang-Chi Chen, Po-Chun Huang, Yuan-Hao Chang, Chien-Chung Ho, Wei-Kuan Shih
2022 J jnl
ACM Trans. Embed. Comput. Syst.
Yi-Syuan Lin, Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Hsin-Wen Wei, Wei-Kuan Shih
2022 conf
NVMSA
Hung-Yu Lin, Yu-Pei Liang, Shuo-Han Chen, Yuan-Hao Chang, Tseng-Yi Chen, Wei-Kuan Shih
2022 A conf
ICCAD
Yu-Cheng Lin, Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Wei-Kuan Shih
2022 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Yi-Da Huang, Wei-Kuan Shih
2022 A conf
ISLPED
Yen-Ting Chen, Han-Xiang Liu, Yuan-Hao Chang, Yu-Pei Liang, Wei-Kuan Shih
2021 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Dharamjeet, Tseng-Yi Chen, Yuan-Hao Chang, Chun-Feng Wu, Chi-Heng Lee, Wei-Kuan Shih
2021 A conf
RTAS
Yu-Pei Liang, Yu-Ting Fang, Shuo-Han Chen, Yen-Ting Chen, Tseng-Yi Chen, Wei-Lin Wang, Wei-Kuan Shih, Yuan-Hao Chang
2021 A* conf
DAC
Yu-Pei Liang, Yung-Han Hsu, Tseng-Yi Chen, Shuo-Han Chen, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2021 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
I-Ju Wang, Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Bo-Jun Chen, Hsin-Wen Wei, Wei-Kuan Shih
2021 J jnl
Future Gener. Comput. Syst.
Chih-Hsuan Chen, Shuo-Han Chen, Yu-Pei Liang, Tseng-Yi Chen, Tsan-sheng Hsu, Hsin-Wen Wei, Wei-Kuan Shih
2021 conf
ASP-DAC
Ping-Xiang Chen, Shuo-Han Chen, Yuan-Hao Chang, Yu-Pei Liang, Wei-Kuan Shih
2021 conf
SmartIoT
Yi-Wei Ma, Jiann-Liang Chen, Wei-Kuan Shih
2020 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Shuo-Han Chen, Tseng-Yi Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2020 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Hsin-Wen Wei, Wei-Kuan Shih
2020 conf
ASP-DAC
Shuo-Han Chen, Yu-Pei Liang, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2020 J jnl
ACM Trans. Embed. Comput. Syst.
Yi-Jing Chuang, Shuo-Han Chen, Yuan-Hao Chang, Yu-Pei Liang, Hsin-Wen Wei, Wei-Kuan Shih
2020 C conf
ISI
Gaddisa Olani Ganfure, Chun-Feng Wu, Yuan-Hao Chang, Wei-Kuan Shih
2020 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Gaddisa Olani Ganfure, Chun-Feng Wu, Yuan-Hao Chang, Wei-Kuan Shih
2020 A* conf
DAC
Yu-Pei Liang, Tseng-Yi Chen, Ching-Ho Chi, Hsin-Wen Wei, Wei-Kuan Shih
2020 A* conf
DAC
Wei-Lin Wang, Tseng-Yi Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2020 conf
NVMSA
Wei-Chun Cheng, Shuo-Han Chen, Yuan-Hao Chang, Kuan-Hsun Chen, Jian-Jia Chen, Tseng-Yi Chen, Ming-Chang Yang, Wei-Kuan Shih
2020 conf
ASP-DAC
Yen-Ting Chen, Ming-Chang Yang, Yuan-Hao Chang, Wei-Kuan Shih
2020 Misc conf
SAC
Shuo-Han Chen, Yu-Pei Liang, Yuan-Hao Chang, Yun-Fei Liu, Chun-Feng Wu, Hsin-Wen Wei, Wei-Kuan Shih
2020 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Yun-Shan Hsieh, Po-Chun Huang, Ping-Xiang Chen, Yuan-Hao Chang, Wang Kang, Ming-Chang Yang, Wei-Kuan Shih
2019 Misc conf
SAC
Shuo-Han Chen, Yong-Ching Lin, Yuan-Hao Chang, Ming-Chang Yang, Tseng-Yi Chen, Hsin-Wen Wei, Wei-Kuan Shih
2019 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Yen-Ting Chen, Ming-Chang Yang, Yuan-Hao Chang, Tseng-Yi Chen, Hsin-Wen Wei, Wei-Kuan Shih
2019 J jnl
ACM Trans. Embed. Comput. Syst.
Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Kam-yiu Lam, Wei-Hsin Li, Wei-Kuan Shih
2019 J jnl
J. Syst. Archit.
Yu-Pei Liang, Shuo-Han Chen, Yuan-Hao Chang, Yong-Chin Lin, Hsin-Wen Wei, Wei-Kuan Shih
2019 A conf
ISLPED
Yu-Pei Liang, Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Pei-Yu Chen, Wei-Kuan Shih
2019 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Shuo-Han Chen, Yuan-Hao Chang, Yu-Ming Chang, Wei-Kuan Shih
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Shuo-Han Chen, Yen-Ting Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2018 J jnl
IEEE Trans. Computers
Shuo-Han Chen, Yuan-Hao Chang, Yu-Pei Liang, Hsin-Wen Wei, Wei-Kuan Shih
2018 A* conf
DAC
Shuo-Han Chen, Tseng-Yi Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2018 A conf
ISLPED
Shuo-Han Chen, Yuan-Hao Chang, Tseng-Yi Chen, Yu-Ming Chang, Pei-Wen Hsiao, Hsin-Wen Wei, Wei-Kuan Shih
2018 A* conf
DAC
Wei-Lin Wang, Tseng-Yi Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2018 Misc conf
SAC
Po-Chun Huang, Yuan-Hao Chang, Tseng-Yi Chen, Chia-Heng Tu, Chun Chen, Hsin-Wen Wei, Wei-Kuan Shih
2018 J jnl
ACM Trans. Storage
Shuo-Han Chen, Tseng-Yi Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2018 J jnl
IEEE Trans. Computers
Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Chih-Ching Kuo, Ming-Chang Yang, Hsin-Wen Wei, Wei-Kuan Shih
2017 conf
IPSN
Shuo-Han Chen, Yu-Pei Liang, Chi-Heng Lee, I-Ju Wang, Wei-Kuan Shih
2017 C conf
IPCCC
Shuo-Han Chen, Wei-Shin Li, Min-Hong Shen, Yi-Han Lien, Tseng-Yi Chen, Tsan-sheng Hsu, Hsin-Wen Wei, Wei-Kuan Shih
2017 Misc conf
ICNC
Shuo-Han Chen, Chi-Heng Lee, Tseng-Yi Chen, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2017 A* conf
DAC
Shuo-Han Chen, Yen-Ting Chen, Hsin-Wen Wei, Wei-Kuan Shih
2017 conf
DASC/PiCom/DataCom/CyberSciTech
Yu-Pei Liang, Shuo-Han Chen, Yi-Han Lien, Tseng-Yi Chen, Heng-Yin Chen, Wei-Kuan Shih
2017 conf
FAS*W@SASO/ICCAC
Shuo-Han Chen, Yung-Chun Chang, Tseng-Yi Chen, Min-Hong Shen, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2017 A* conf
DAC
Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Chih-Ching Kuo, Ming-Chang Yang, Hsin-Wen Wei, Wei-Kuan Shih
2017 B conf
ICCCN
Shuo-Han Chen, I-Ju Wang, Tseng-Yi Chen, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2017 conf
ASP-DAC
Yen-Ting Chen, Ming-Chang Yang, Yuan-Hao Chang, Tseng-Yi Chen, Hsin-Wen Wei, Wei-Kuan Shih
2017 C conf
CLUSTER
Shuo-Han Chen, Jun-Long Lin, Tseng-Yi Chen, Tsan-sheng Hsu, Hsin-Wen Wei, Wei-Kuan Shih
2017 J jnl
ACM Trans. Embed. Comput. Syst.
Tseng-Yi Chen, Yuan-Hao Chang, Shuo-Han Chen, Nien-I Hsu, Hsin-Wen Wei, Wei-Kuan Shih
2017 conf
SmartCloud
Shuo-Han Chen, Min-Hong Shen, Yung-Chun Chang, Tseng-Yi Chen, Tsan-sheng Hsu, Hsin-Wen Wei, Wei-Kuan Shih
2017 conf
COMPSAC (1)
Li-Zheng Liang, Ming-Chang Yang, Yuan-Hao Chang, Tseng-Yi Chen, Shuo-Han Chen, Hsin-Wen Wei, Wei-Kuan Shih
2016 Misc conf
ICNC
Shuo-Han Chen, Tseng-Yi Chen, Yu-Chun Cheng, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2016 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Sheng-Wei Cheng, Yuan-Hao Chang, Tseng-Yi Chen, Yu-Fen Chang, Hsin-Wen Wei, Wei-Kuan Shih
2016 conf
Sarnoff Symposium
Shuo-Han Chen, Tseng-Yi Chen, Chi-Heng Lee, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2016 conf
Sarnoff Symposium
Shuo-Han Chen, Tseng-Yi Chen, Hsin-Wen Wei, Tsan-sheng Hsu, Chen-Hung Huang, Wei-Kuan Shih
2016 conf
CTS
Shuo-Han Chen, Yen-Ting Chen, Yu-Pei Liang, Yong-Ching Lin, Heng-Yin Chen, Wei-Kuan Shih
2016 J jnl
IEEE Trans. Computers
Tseng-Yi Chen, Yuan-Hao Chang, Ming-Chang Yang, Yun-Jhu Chen, Hsin-Wen Wei, Wei-Kuan Shih
2016 conf
ASP-DAC
Wei-Lin Wang, Yuan-Hao Chang, Po-Chun Huang, Chia-Heng Tu, Hsin-Wen Wei, Wei-Kuan Shih
2016 conf
Sarnoff Symposium
Chi-Heng Lee, Tseng-Yi Chen, Shuo-Han Chen, Hsin-Wen Wei, Heng-Yin Chen, Wei-Kuan Shih
2016 conf
CTS
Fu-Nan Huang, Tseng-Yi Chen, Shuo-Han Chen, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2015 C conf
CloudCom
Hsin-Wen Wei, Tseng-Yi Chen, Shuo-Han Chen, Nai-Yuan Jhang, Li-Zheng Liang, Chih-Ching Kuo, Tsan-sheng Hsu, Wei-Kuan Shih
2015 conf
CTS
Shuo-Han Chen, Tseng-Yi Chen, Hsin-Wen Wei, Nai-Yuan Jhang, Tsan-sheng Hsu, Wei-Kuan Shih
2015 J jnl
ACM Trans. Storage
Tseng-Yi Chen, Hsin-Wen Wei, Tsung Tai Yeh, Tsan-sheng Hsu, Wei-Kuan Shih
2015 J jnl
Softw. Pract. Exp.
Tseng-Yi Chen, Hsiu-Lien Yeh, Hsin-Wen Wei, Mei-ju Sun, Tsan-sheng Hsu, Wei-Kuan Shih
2015 C conf
CLUSTER
Shih-Wen Hsu, Tseng-Yi Chen, Yung-Chun Chang, Shuo-Han Chen, Han-Chieh Chao, Tsen-Yeh Lin, Wei-Kuan Shih
2015 conf
CTS
Tseng-Yi Chen, Shih-Wen Hsu, Han-Chieh Chao, Yung-Chun Chang, Heng-Yin Chen, Yu-Chun Cheng, Wei-Kuan Shih
2015 conf
VTC Fall
Shuo-Han Chen, Yung-Chun Chang, Tseng-Yi Chen, Yu-Chun Cheng, Hsin-Wen Wei, Tsan-sheng Hsu, Wei-Kuan Shih
2014 conf
IIH-MSP
Shih-Wen Hsu, Song Chun Lin, Yong Ming Jheng, Wei-Kuan Shih, Han-Chieh Chao
2014 B conf
CCGRID
Tseng-Yi Chen, Hsin-Wen Wei, Ying-Jie Chen, Nia-Yuan Chang, Tsan-sheng Hsu, Wei-Kuan Shih
2014 A conf
ICS
Tseng-Yi Chen, Heng-Yin Chen, Nai-Yuan Jhang, Wei-Kuan Shih
2014 B conf
MASS
Tseng-Yi Chen, Hsin-Wen Wei, Yu-Chun Cheng, Wei-Kuan Shih, Heng-Yin Chen
2014 B conf
SMC
Tseng-Yi Chen, Shuo-Han Chen, Heng-Yin Chen, Wei-Kuan Shih
2014 B conf
RTCSA
Nien-I Hsu, Tseng-Yi Chen, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih, Norman Chang
2014 conf
NVMSA
Yuan-Hao Chang, Tseng-Yi Chen, Yun-Jhu Chen, Hsin-Wen Wei, Wei-Kuan Shih, Zhao-Rong Lai
2014 J jnl
IET Signal Process.
Hsiu-Lien Yeh, Shu-Tsai Gue, Piyu Tsai, Wei-Kuan Shih
2014 J jnl
Comput. Stand. Interfaces
Hsiu-Lien Yeh, Tien-Ho Chen, Wei-Kuan Shih
2014 conf
IIH-MSP
Tseng-Yi Chen, Fan-Hsun Tseng, Nen-Fu Huang, Wei-Kuan Shih, Han-Chieh Chao, Li-Der Chou
2014 A conf
ICCAD
Sheng-Wei Cheng, Yu-Fen Chang, Yuan-Hao Chang, Hsin-Wen Wei, Wei-Kuan Shih
2013 B conf
COMPSAC
Tseng-Yi Chen, Hsin-Wen Wei, Nien-I Hsu, Wei-Kuan Shih
2013 C conf
CLUSTER
Tseng-Yi Chen, Hsin-Wen Wei, Ying-Jie Chen, Tsan-sheng Hsu, Wei-Kuan Shih
2013 J jnl
J. Interconnect. Networks
Tseng-Yi Chen, Hsin-Wen Wei, Che-Rung Lee, Fu-Nan Huang, Tsan-sheng Hsu, Wei-Kuan Shih
2013 C conf
CLUSTER
Tseng-Yi Chen, Hsin-Wen Wei, Ying-Jie Chen, Wei-Kuan Shih, Tsan-sheng Hsu
2013 conf
CTS
Tseng-Yi Chen, Hsin-Wen Wei, Ming-Feng Wei, Ying-Jie Chen, Tsan-sheng Hsu, Wei-Kuan Shih
2013 J jnl
IET Inf. Secur.
Hsiu-Lien Yeh, Tien-Ho Chen, Kuei-Jung Hu, Wei-Kuan Shih
2012 Misc conf
UCC
Tseng-Yi Chen, Tsung Tai Yeh, Hsin-Wen Wei, Yu-Xun Fang, Wei-Kuan Shih, Tsan-sheng Hsu
2012 J jnl
Multim. Tools Appl.
Pin-Chuan Liu, Jenq-Shiou Leu, Tsung-Chieh Lee, Tien-Ho Chen, Yun-Sun Yee, Wei-Kuan Shih
2011 Misc conf
CASES
Chih-Sheng Wang, Guillermo A. Pérez, Yeh-Ching Chung, Wei-Chung Hsu, Wei-Kuan Shih, Hong-Rong Hsu
2011 conf
MUE
Tien-Ho Chen, Hsiu-Lien Yeh, Wei-Kuan Shih
2011 J jnl
J. Netw. Comput. Appl.
Tien-Ho Chen, Yen-Chiu Chen, Wei-Kuan Shih, Hsin-Wen Wei
2011 conf
SOCA
Tseng-Yi Chen, Hsin-Wen Wei, Jenq-Shiou Leu, Wei-Kuan Shih
2011 J jnl
J. Inf. Sci. Eng.
Jia-Ming Chen, Jenq-Shiou Leu, Yen-Chiu Chen, Hsin-Wen Wei, Wei-Kuan Shih
2011 J jnl
J. Signal Process. Syst.
Jia-Ming Chen, Chun-Nan Liu, Jen-Kuei Yang, Shau-Yin Tseng, Wei-Kuan Shih, An-Yeu Wu
2011 J jnl
Future Gener. Comput. Syst.
Tien-Ho Chen, Han-Cheng Hsiang, Wei-Kuan Shih
2010 conf
FGIT-FGCN (1)
Tien-Ho Chen, Hsiu-Lien Yeh, Pin-Chuan Liu, Han-Cheng Hsiang, Wei-Kuan Shih
2010 J jnl
Comput. Stand. Interfaces
Hui-Ching Hsieh, Jenq-Shiou Leu, Wei-Kuan Shih
2010 conf
UIC/ATC Workshops
Tien-Ho Chen, Yen-Chiu Chen, Wei-Kuan Shih
2010 Misc conf
GrC
Tsung Tai Yeh, Tseng-Yi Chen, Yen-Chiu Chen, Wei-Kuan Shih
2010 conf
CCNC
Hui-Ching Hsieh, Jenq-Shiou Leu, Wei-Kuan Shih
2010 conf
PerCom Workshops
Pin-Chuan Liu, Chih-Wei Yi, Yi-Ta Chuang, Hsiao-Heng Lu, Jenq-Shiou Leu, Wei-Kuan Shih
2010 conf
ISA
Tien-Ho Chen, Han-Cheng Hsiang, Wei-Kuan Shih
2010 J jnl
J. Inf. Sci. Eng.
Hsin-Wen Wei, Wan-Chen Lu, Pei-Chi Huang, Wei-Kuan Shih, Ming-Yang Kao
2010 J jnl
Theor. Comput. Sci.
Yen-Chiu Chen, Hsin-Wen Wei, Pei-Chi Huang, Wei-Kuan Shih, Tsan-sheng Hsu
2009 conf
WESE@ESWEEK
Chung-Wen Huang, Wei-Kuan Shih, Yarsun Hsu, Jenq Kuen Lee
2009 J jnl
J. Inf. Sci. Eng.
Jia-Ming Chen, Wan-Chen Lu, Wei-Kuan Shih, Ming-Chung Tang
2009 J jnl
Comput. Stand. Interfaces
Han-Cheng Hsiang, Wei-Kuan Shih
2009 B conf
Mobile Data Management
Pin-Chuan Liu, Tsun-Chieh Chiang, Yi-Fan Chien, Wei-Kuan Shih, Chih-Lin Hu
2009 J jnl
Algorithmica
Pei-Chi Huang, Hsin-Wen Wei, Wan-Chen Lu, Wei-Kuan Shih, Tsan-sheng Hsu
2009 B conf
ISAAC
Pei-Chi Huang, Hsin-Wen Wei, Yen-Chiu Chen, Ming-Yang Kao, Wei-Kuan Shih, Tsan-sheng Hsu
2009 J jnl
Comput. Commun.
Han-Cheng Hsiang, Wei-Kuan Shih
2008 J jnl
IEEE Trans. Computers
Wan-Chen Lu, Kwei-Jay Lin, Hsin-Wen Wei, Wei-Kuan Shih
2008 J jnl
Comput. Networks
Yung-Cheng Tu, Meng Chang Chen, Yeali S. Sun, Wei-Kuan Shih
2008 J jnl
Inf. Process. Lett.
Hsin-Wen Wei, Kwei-Jay Lin, Wan-Chen Lu, Wei-Kuan Shih
2008 conf
Mobility Conference
Hui-Ching Hsieh, Jenq-Shiou Leu, Yen-Chiu Chen, Wei-Kuan Shih
2008 conf
FGCN (2)
Han-Cheng Hsiang, Hsiang-Chou Kuo, Wei-Kuan Shih
2007 J jnl
Comput. Networks
Meng Chang Chen, Li-Ping Tung, Yeali S. Sun, Wei-Kuan Shih
2007 B conf
RTCSA
Hsin-Wen Wei, Yi-Hsiung Chao, Shun-Shii Lin, Kwei-Jay Lin, Wei-Kuan Shih
2007 J jnl
J. Netw. Comput. Appl.
Jenq-Shiou Leu, Yuan-Po Chi, Wei-Kuan Shih
2007 J jnl
J. Supercomput.
Yung-Chia Lin, Yi-Ping You, Chung-Wen Huang, Jenq Kuen Lee, Wei-Kuan Shih, TingTing Hwang
2007 J jnl
J. Syst. Softw.
Hsung-Pin Chang, Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
2007 Misc conf
PDPTA
Jia-Ming Chen, Hsin-Wen Wei, Jian-Liang Luo, Pou-Hang Ian, Wei-Kuan Shih
2007 J jnl
Int. J. Commun. Syst.
Yeali S. Sun, Yung-Cheng Tu, Meng Chang Chen, Wei-Kuan Shih
2007 B conf
ECRTS
Wan-Chen Lu, Kwei-Jay Lin, Hsin-Wen Wei, Wei-Kuan Shih
2007 A conf
IPDPS
Wan-Chen Lu, Kwei-Jay Lin, Hsin-Wen Wei, Wei-Kuan Shih
2007 J jnl
Real Time Syst.
Wan-Chen Lu, Kwei-Jay Lin, Hsin-Wen Wei, Wei-Kuan Shih
2007 conf
SIGMAP
Jia-Ming Chen, Chiu-Ling Chen, Jian-Liang Luo, Po-Wen Cheng, Chia-Hao Yu, Shau-Yin Tseng, Wei-Kuan Shih
2007 C conf
AAIM
Pei-Chi Huang, Hsin-Wen Wei, Wan-Chen Lu, Wei-Kuan Shih, Tsan-sheng Hsu
2007 J jnl
IEEE Commun. Mag.
Li-Ping Tung, Wei-Kuan Shih, Te-Chung Cho, Yeali S. Sun, Meng Chang Chen
2006 J jnl
J. Syst. Softw.
Wan-Chen Lu, Jen-Wei Hsieh, Wei-Kuan Shih, Tei-Wei Kuo
2006 Misc conf
SAC
Wan-Chen Lu, Jen-Wei Hsieh, Wei-Kuan Shih
2006 B conf
GLOBECOM
Yung-Cheng Tu, Meng Chang Chen, Yeali S. Sun, Wei-Kuan Shih
2006 conf
SIGMAP
Jia-Ming Chen, Jenq-Shiou Leu, Hsin-Wen Wei, Li-Ping Tung, Yen-Ting Chou, Wei-Kuan Shih
2006 conf
ICETE (Selected Papers)
Jia-Ming Chen, Jenq-Shiou Leu, Hsin-Wen Wei, Li-Ping Tung, Yen-Ting Chou, Wei-Kuan Shih
2006 conf
CCNC
Jenq-Shiou Leu, Wei-Kuan Shih, Yuan-Po Chi
2006 C conf
EUC
Jia-Ming Chen, Chih-Hao Chang, Shau-Yin Tseng, Jenq Kuen Lee, Wei-Kuan Shih
2006 J jnl
IEEE Commun. Mag.
Jenq-Shiou Leu, Rong-Horng Lai, Hsin-I Lin, Wei-Kuan Shih
2005 B conf
NETWORKING
Meng Chang Chen, Li-Ping Tung, Yeali S. Sun, Wei-Kuan Shih
2005 conf
WiMob (4)
Jenq-Shiou Leu, Yuan-Po Chi, Shou-Chuan Chang, Wei-Kuan Shih
2005 B conf
WCNC
Jenq-Shiou Leu, Rong-Horng Lai, Hsin-I Lin, Wei-Kuan Shih
2005 B conf
RTCSA
Hsin-Wen Wei, Pei-Chi Huang, Hsung-Pin Chang, Wei-Kuan Shih
2005 B conf
RTCSA
Pei-Chi Huang, Wan-Chen Lu, Chun-Nan Chou, Wei-Kuan Shih
2004 conf
COMPSAC Workshops
Li-Ping Tung, Jia-Ming Chen, Wei-Fen Hsu, Wei-Kuan Shih
2004 J jnl
Comput. J.
Hsung-Pin Chang, Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
2004 conf
LCPC
Yung-Chia Lin, Yi-Ping You, Chung-Wen Huang, Jenq Kuen Lee, Wei-Kuan Shih, TingTing Hwang
2003 J jnl
Comput. Commun.
Chiang-Shiang Wan, Wei-Kuan Shih, Ruei-Chuan Chang
2003 B conf
RTCSA
Hsung-Pin Chang, Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
2003 J jnl
Comput. Commun.
Chiang-Shiang Wan, Wei-Kuan Shih, Ruei-Chuan Chang
2001 J jnl
J. Netw. Comput. Appl.
Ming-Chung Tang, Chun-Nun Chou, Ching-Hui Tang, D. C. Pan, Wei-Kuan Shih
2001 J jnl
J. Syst. Softw.
Hsung-Pin Chang, Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
2000 A conf
RTSS
Wei-Kuan Shih, Che-Rung Lee, Ching-Hui Tang
2000 B conf
COMPSAC
Hsung-Pin Chang, Ruei-Chuan Chang, Ray-I Chang, Wei-Kuan Shih
2000 B conf
ICPADS
Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
2000 J jnl
Real Time Syst.
Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
2000 J jnl
J. Inf. Sci. Eng.
Wei-Kuan Shih, Chung-Der Lin, Yar-Wen Chang, Jenq Kuen Lee
2000 A conf
CIKM
Huei-Long Wang, Shih-Hung Wu, K. K. Wang, Cheng-Lung Sung, Wen-Lian Hsu, Wei-Kuan Shih
2000 Misc conf
PDPTA
Ming-Chung Tang, Chin-Nan Chou, Ching-Hui Tang, D. C. Pan, Wei-Kuan Shih
1999 J jnl
Theor. Comput. Sci.
Wei-Kuan Shih, Wen-Lian Hsu
1999 conf
Agents
Huei-Long Wang, Wei-Kuan Shih, C. N. Hsu, Y. S. Chen, Y. L. Wang, Wen-Lian Hsu
1999 Misc conf
PDPTA
Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
1998 conf
IDMS
Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
1998 A conf
RTSS
Ray-I Chang, Wei-Kuan Shih, Ruei-Chuan Chang
1998 B conf
ICPADS
Jenq Kuen Lee, Chung-Der Lin, Yar-Wen Chang, Wei-Kuan Shih
1997 B conf
ICPP
Shan-Chyun Ku, Wei-Kuan Shih, Biing-Feng Wang
1996 J jnl
SIAM J. Comput.
Wei-Kuan Shih, Jane W.-S. Liu
1995 J jnl
IEEE Trans. Computers
Wei-Kuan Shih, Jane W.-S. Liu
1994 J jnl
Proc. IEEE
Jane W.-S. Liu, Wei-Kuan Shih, Kwei-Jay Lin, Riccardo Bettati, Jen-Yao Chung
1993 J jnl
IEEE Trans. Software Eng.
Wei-Kuan Shih, Jane W.-S. Liu, C. L. Liu
1993 A conf
RTSS
Jane W.-S. Liu, J. L. Redondo, Zhong Deng, Too-Seng Tia, Riccardo Bettati, A. Silberman, Matthew F. Storch, Rhan Ha, Wei-Kuan Shih
1993
Wei-Kuan Shih
1992 J jnl
SIAM J. Comput.
Wei-Kuan Shih, T. C. Chern, Wen-Lian Hsu
1992 A conf
RTSS
Wei-Kuan Shih, Jane W.-S. Liu
1991 J jnl
SIAM J. Comput.
Wei-Kuan Shih, Jane W.-S. Liu, Jen-Yao Chung
1991 J jnl
Computer
Jane W.-S. Liu, Kwei-Jay Lin, Wei-Kuan Shih, Albert Chuang-shi Yu, Jen-Yao Chung, Wei Zhao
1990 J jnl
IEEE Trans. Computers
Wei-Kuan Shih, Sun Wu, Yue-Sun Kuo
1989 J jnl
Discret. Appl. Math.
Wei-Kuan Shih, Wen-Lian Hsu
1989 J jnl
Inf. Process. Lett.
Wei-Kuan Shih, Wen-Lian Hsu
1989 A conf
RTSS
Wei-Kuan Shih, Jane W.-S. Liu, Jen-Yao Chung
1989 J jnl
Integr.
Yue-Sun Kuo, T. C. Chern, Wei-Kuan Shih
1989 J jnl
ACM SIGOPS Oper. Syst. Rev.
Wei-Kuan Shih, Jane W.-S. Liu, Jen-Yao Chung, Donald W. Gillies
1989 J jnl
Microprocessing and Microprogramming
Jen-Yao Chung, Wei-Kuan Shih, Jane W.-S. Liu, Donald W. Gillies
1988 A* conf
DAC
Yue-Sun Kuo, T. C. Chern, Wei-Kuan Shih
1986 J jnl
Inf. Process. Lett.
Ferng-Ching Lin, Wei-Kuan Shih
tests/unit/test_decompile_binja_extractor.py
← Index tests/unit/test_decompile_binja_extractor.py python
"""Unit tests for DecompileBinja (top-level extractor) and prepare_export_data."""
import hashlib
import json
import os
import sys
import pytest
from unittest.mock import MagicMock, patch, PropertyMock
from datetime import datetime

# Install binaryninja stubs
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

from redb.extractors.enum import Tag


# ============================================================================
# 7a. DecompileBinja — methods that don't require a live Binary Ninja session
# ============================================================================


class TestDecompileBinjaCalculateMD5:
    def test_calculate_md5(self):
        """calculate_md5("test") returns expected MD5."""
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = object.__new__(DecompileBinja)
            obj.log = MagicMock()
            result = obj.calculate_md5("test")
            expected = hashlib.md5(b"test").hexdigest()
            assert result == expected


class TestDecompileBinjaTimeouts:
    def _make_extractor(self, env_vars=None):
        """Create a DecompileBinja with mocked Extractor.__init__."""
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            if env_vars:
                with patch.dict(os.environ, env_vars, clear=False):
                    obj = DecompileBinja.__new__(DecompileBinja)
                    obj.log = MagicMock()
                    obj.analysis_results = None
                    obj.binja_decompiler = None
                    obj.filetype = None
                    obj.goresym_data = None
                    obj.goresym_output_path = None
                    # Re-run timeout logic
                    try:
                        obj.BINJA_TIMEOUT = int(os.getenv("BINJA_TIMEOUT", "1200"))
                    except ValueError:
                        obj.BINJA_TIMEOUT = 1200
                    try:
                        obj.DECOMPILE_EXTRACTOR_TIMEOUT = int(
                            os.getenv("DECOMPILE_EXTRACTOR_TIMEOUT", "2580")
                        )
                    except ValueError:
                        obj.DECOMPILE_EXTRACTOR_TIMEOUT = 2580
                    return obj
            else:
                obj = DecompileBinja.__new__(DecompileBinja)
                obj.log = MagicMock()
                obj.analysis_results = None
                obj.binja_decompiler = None
                obj.filetype = None
                obj.goresym_data = None
                obj.goresym_output_path = None
                obj.BINJA_TIMEOUT = 1200
                obj.DECOMPILE_EXTRACTOR_TIMEOUT = 2580
                return obj

    def test_timeout_defaults(self):
        obj = self._make_extractor()
        assert obj.BINJA_TIMEOUT == 1200
        assert obj.DECOMPILE_EXTRACTOR_TIMEOUT == 2580

    def test_timeout_from_env(self):
        obj = self._make_extractor(env_vars={"BINJA_TIMEOUT": "600"})
        assert obj.BINJA_TIMEOUT == 600

    def test_timeout_invalid_env(self):
        obj = self._make_extractor(env_vars={"BINJA_TIMEOUT": "not_a_number"})
        assert obj.BINJA_TIMEOUT == 1200


class TestDecompileBinjaDotnet:
    def _make_extractor(self, filetype=None):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.filetype = filetype
            obj.filepath = "/tmp/fake.bin"
            obj.binary = b"\x00" * 100
            obj.hash = MagicMock()
            obj.hash.sha256 = "a" * 64
            return obj

    def test_is_dotnet_non_pe(self):
        obj = self._make_extractor(filetype="elf")
        assert obj.is_dotnet() is False

    def test_is_dotnet_pe_without_com(self):
        """PE without .NET COM descriptor -> False."""
        obj = self._make_extractor(filetype="pebin")
        # Mock magic to not have .Net
        with patch("redb.extractors.decompiler.DecompileBinja.magic") as mock_magic:
            mock_magic.from_buffer.return_value = "PE32 executable"
            with patch("redb.extractors.decompiler.DecompileBinja.pefile") as mock_pefile:
                mock_pe = MagicMock()
                entry = MagicMock()
                entry.name = "IMAGE_DIRECTORY_ENTRY_IMPORT"
                entry.Size = 100
                mock_pe.OPTIONAL_HEADER.DATA_DIRECTORY = [entry]
                mock_pefile.PE.return_value = mock_pe
                assert obj.is_dotnet() is False

    def test_is_dotnet_pe_with_com_descriptor(self):
        """PE with COM descriptor -> True."""
        obj = self._make_extractor(filetype="pebin")
        with patch("redb.extractors.decompiler.DecompileBinja.magic") as mock_magic:
            mock_magic.from_buffer.return_value = "PE32 executable"
            with patch("redb.extractors.decompiler.DecompileBinja.pefile") as mock_pefile:
                mock_pe = MagicMock()
                entry = MagicMock()
                entry.name = "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR"
                entry.Size = 72
                mock_pe.OPTIONAL_HEADER.DATA_DIRECTORY = [entry]
                mock_pefile.PE.return_value = mock_pe
                assert obj.is_dotnet() is True


class TestDecompileBinjaGolang:
    def _make_extractor(self, filetype=None):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.filetype = filetype
            obj.filepath = "/tmp/fake.bin"
            obj.hash = MagicMock()
            obj.hash.sha256 = "a" * 64
            return obj

    def test_is_golang_non_elf_pe(self):
        obj = self._make_extractor(filetype=None)
        assert obj.is_golang() is False

    def test_is_golang_elf_with_go_sections(self):
        """ELF with .gopclntab section -> True."""
        obj = self._make_extractor(filetype="elf")
        with patch("builtins.open", MagicMock()):
            with patch("redb.extractors.decompiler.DecompileBinja.ELFFile") as mock_elf_cls:
                mock_elf = MagicMock()
                sec1 = MagicMock()
                sec1.name = ".text"
                sec1.__getitem__ = lambda self, k: 0x2 if k == "sh_flags" else 0
                sec1.data.return_value = b""
                sec2 = MagicMock()
                sec2.name = ".gopclntab"
                sec2.__getitem__ = lambda self, k: 0x2 if k == "sh_flags" else 0
                sec2.data.return_value = b""
                mock_elf.iter_sections.return_value = [sec1, sec2]
                mock_elf_cls.return_value = mock_elf
                assert obj.is_golang() is True

    def test_is_golang_elf_without_go(self):
        obj = self._make_extractor(filetype="elf")
        with patch("builtins.open", MagicMock()):
            with patch("redb.extractors.decompiler.DecompileBinja.ELFFile") as mock_elf_cls:
                mock_elf = MagicMock()
                sec = MagicMock()
                sec.name = ".text"
                sec.__getitem__ = lambda self, k: 0x2 if k == "sh_flags" else 0
                sec.data.return_value = b"no go signatures here"
                mock_elf.iter_sections.return_value = [sec]
                mock_elf_cls.return_value = mock_elf
                assert obj.is_golang() is False


class TestDecompileBinjaTag:
    def test_tag_returns_decompiled(self):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            assert obj.tag() == Tag.DECOMPILED.value


class TestDecompileBinjaContextManager:
    def test_context_manager_protocol(self):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.binja_decompiler = None
            obj.goresym_output_path = None
            assert obj.__enter__() is obj
            # __exit__ calls cleanup_run
            obj.__exit__(None, None, None)

    def test_cleanup_run_clears_state(self):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.binja_decompiler = MagicMock()
            obj.goresym_output_path = None
            obj.cleanup_run()
            assert obj.binja_decompiler is None


class TestDecompileBinjaExtract:
    def test_extract_timeout_handling(self):
        """Thread timeout -> returns None and calls cleanup."""
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.analysis_results = None
            obj.binja_decompiler = None
            obj.goresym_output_path = None
            obj.DECOMPILE_EXTRACTOR_TIMEOUT = 0  # Immediate timeout
            obj.sha256 = "a" * 64
            obj.sha1 = "b" * 40
            obj.md5 = "c" * 32
            # Mock analyze_binary to block
            import threading
            obj.analyze_binary = lambda: None
            result = obj.extract()
            assert result is None

    def test_analyze_binary_skips_dotnet(self):
        """Dotnet binary -> analyze_binary returns None."""
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.filetype = "pebin"
            obj.filepath = "/fake"
            obj.hash = MagicMock()
            obj.hash.sha256 = "a" * 64
            obj.binja_decompiler = None
            obj.goresym_output_path = None
            obj.goresym_data = None
            obj.BINJA_TIMEOUT = 60
            obj.exporters = []
            obj.index_prefix = None
            with patch.object(obj, "is_dotnet", return_value=True):
                result = obj.analyze_binary()
                assert result is None


# ============================================================================
# 7b. prepare_export_data (ClickHouse schema)
# ============================================================================


class TestPrepareExportData:
    def _make_extractor_with_results(self, goresym_data=None):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.goresym_data = goresym_data
            obj.analysis_results = {
                "sha256": "a" * 64,
                "sha1": "b" * 40,
                "md5": "c" * 32,
                "decompiled": [
                    {
                        "decompiled_function_hash": "h" * 64,
                        "decompiled_function": "void test() {}",
                        "decompiled_function_name": "test",
                        "decompiled_function_prototype": "void test()",
                        "decompiled_function_address": 0x1000,
                        "function_type": "USER",
                        "functions_caller": [],
                        "functions_call": [],
                        "disassembled_function_hash": "d" * 64,
                        "flattened_score": 0.0,
                        "mba_score": 0.0,
                    }
                ],
                "disassembled": [
                    {
                        "disassembled_function_hash": "d" * 64,
                        "disassembled_function": "0x1000: push rbp",
                        "disassembled_function_no_addresses": "push rbp",
                        "disassembled_function_name": "test",
                        "disassembled_function_address": 0x1000,
                        "function_type": "USER",
                        "instructions_count": 5,
                        "instructions_types": ["DATA_MOVEMENT"],
                        "control_flow_count": 1,
                        "memory_access_pattern": ["MEM_STACK"],
                        "register_usage": ["GPR"],
                        "data_references_count": 0,
                        "max_block_size": 5,
                        "num_calls": 1,
                        "stack_size": -8,
                        "decompiled_function_hash": "h" * 64,
                        "tlsh_disassembly": None,
                        "tlsh_llil": None,
                        "minhash": [1, 2, 3],
                        "cyclomatic_complexity": 2,
                    }
                ],
                "cfg": [
                    {
                        "function_address": 0x1000,
                        "disassembled_function_hash": "d" * 64,
                        "cfg_topology_hash": b'\x00' * 16,
                        "block_count": 3,
                        "edge_count": 4,
                        "llil_total_operations": 20,
                        "call_count": 1,
                        "cyclomatic_complexity": 3,
                        "loop_count": 1,
                        "max_depth": 2,
                        "max_fan_out": 2,
                        "md_index_topdown": 12345,
                        "md_index_bottomup": 67890,
                        "prime_product_llil": 99999,
                        "cfg_feature_tlsh": None,
                        "wl_minhash": [0] * 128,
                        "bb_features": [[5, 1, 0, 2, 0, 1, 1, 2]] * 3,
                        "cfg_adjacency": [(0 << 16) | 1, (0 << 16) | 2, (1 << 16) | 2],
                    }
                ],
                "llil": [
                    {
                        "sha256_llil": "l" * 64,
                        "function_type": "USER",
                        "instructions_types_llil": [],
                        "control_flow_count_llil": 0,
                        "memory_access_pattern_llil": [],
                        "register_usage": {},
                        "total_reg_reads": 0,
                        "total_reg_written": 0,
                        "data_references_count": 0,
                        "max_block_size": 5,
                        "num_calls": 0,
                        "stack_size": -8,
                        "body_llil_vector": [],
                        "function_address": 0x1000,
                        "disassembled_function_hash": "d" * 64,
                        "tlsh_disassembly": None,
                        "tlsh_llil": None,
                    }
                ],
                "errors": [],
                "strings": [
                    {
                        "string": "Hello",
                        "string_raw": "Hello",
                        "string_encoding": "Utf8String",
                        "string_offset": 0,
                        "string_length": 5,
                        "string_raw_length": 5,
                        "string_entropy": 2.32,
                    }
                ],
            }
            return obj

    def test_prepare_export_returns_none_no_results(self):
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.analysis_results = None
            result = obj.prepare_export_data("ClickHouseExporter")
            assert result is None

    def test_prepare_export_multi_table_flag(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        assert result["multi_table"] is True

    def test_prepare_export_all_tables_present(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        expected_tables = [
            "decompiled_content",
            "decompiled_refs",
            "disassembled_content",
            "disassembled_refs",
            "llil_content",
            "llil_refs",
            "cfg_functions",
            "function_similarity_metrics",
            "strings_raw",
        ]
        for table in expected_tables:
            assert table in result, f"Missing table: {table}"

    def test_prepare_export_decompiled_content_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["decompiled_content"]
        assert len(table["column_names"]) == len(table["column_type_names"])
        assert "decompiled_function_hash" in table["column_names"]

    def test_prepare_export_decompiled_refs_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["decompiled_refs"]
        assert len(table["column_names"]) == len(table["column_type_names"])
        assert "sha256" in table["column_names"]

    def test_prepare_export_disassembled_content_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["disassembled_content"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_disassembled_refs_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["disassembled_refs"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_llil_content_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["llil_content"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_llil_refs_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["llil_refs"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_cfg_functions_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["cfg_functions"]
        assert len(table["column_names"]) == len(table["column_type_names"])
        assert table["table"] == "code_binja_cfg_functions"
        assert "cfg_topology_hash" in table["column_names"]
        assert "wl_minhash" in table["column_names"]
        assert "bb_features" in table["column_names"]

    def test_prepare_export_function_similarity_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["function_similarity_metrics"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_strings_raw_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["strings_raw"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_errors_schema(self):
        obj = self._make_extractor_with_results()
        result = obj.prepare_export_data("ClickHouseExporter")
        table = result["function_analysis_errors"]
        assert len(table["column_names"]) == len(table["column_type_names"])

    def test_prepare_export_golang_metadata_present(self):
        obj = self._make_extractor_with_results(goresym_data={"UserFunctions": []})
        result = obj.prepare_export_data("ClickHouseExporter")
        assert "golang_metadata" in result

    def test_prepare_export_golang_metadata_absent(self):
        obj = self._make_extractor_with_results(goresym_data=None)
        result = obj.prepare_export_data("ClickHouseExporter")
        assert "golang_metadata" not in result


class TestPrepareHelperFunctions:
    """Test the helper functions inside prepare_export_data."""

    def test_prepare_array_field_none(self):
        # The prepare_array_field function converts None -> []
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.goresym_data = None
            obj.analysis_results = {
                "sha256": "a" * 64, "sha1": "b" * 40, "md5": "c" * 32,
                "decompiled": [], "disassembled": [], "cfg": [], "llil": [],
                "errors": [], "strings": [],
            }
            result = obj.prepare_export_data("ClickHouseExporter")
            # Verify the export succeeds (function works even with empty lists)
            assert result is not None

    def test_prepare_array_field_list(self):
        """List values pass through."""
        # Verified through the export data containing arrays
        pass

    def test_prepare_register_usage_map(self):
        """Dict converted to {reg: (reads, writes)} tuples."""
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.goresym_data = None
            obj.analysis_results = {
                "sha256": "a" * 64, "sha1": "b" * 40, "md5": "c" * 32,
                "decompiled": [], "disassembled": [],
                "cfg": [],
                "llil": [{
                    "sha256_llil": "l" * 64, "function_type": "USER",
                    "instructions_types_llil": [], "control_flow_count_llil": 0,
                    "memory_access_pattern_llil": [],
                    "register_usage": {"rbx": {"reads": 3, "writes": 1}},
                    "total_reg_reads": 3, "total_reg_written": 1,
                    "data_references_count": 0, "max_block_size": 5,
                    "num_calls": 0, "stack_size": 0,
                    "body_llil_vector": [],
                    "function_address": 0x1000,
                    "disassembled_function_hash": "d" * 64,
                    "tlsh_disassembly": None,
                    "tlsh_llil": None,
                }],
                "errors": [], "strings": [],
            }
            result = obj.prepare_export_data("ClickHouseExporter")
            # The LLIL content data should have register_usage_llil as a map
            llil_data = result["llil_content"]["data"]
            assert len(llil_data) == 1
            # Column index 5 is register_usage_llil
            reg_map = llil_data[0][5]
            assert reg_map == {"rbx": (3, 1)}

    def test_prepare_register_usage_map_empty(self):
        """Empty/None register usage -> {}."""
        with patch("redb.extractors.decompiler.DecompileBinja.Extractor.__init__", return_value=None):
            from redb.extractors.decompiler.DecompileBinja import DecompileBinja
            obj = DecompileBinja.__new__(DecompileBinja)
            obj.log = MagicMock()
            obj.goresym_data = None
            obj.analysis_results = {
                "sha256": "a" * 64, "sha1": "b" * 40, "md5": "c" * 32,
                "decompiled": [], "disassembled": [],
                "cfg": [],
                "llil": [{
                    "sha256_llil": "l" * 64, "function_type": "USER",
                    "instructions_types_llil": [], "control_flow_count_llil": 0,
                    "memory_access_pattern_llil": [],
                    "register_usage": None,
                    "total_reg_reads": 0, "total_reg_written": 0,
                    "data_references_count": 0, "max_block_size": 0,
                    "num_calls": 0, "stack_size": 0,
                    "body_llil_vector": [],
                    "function_address": 0x1000,
                    "disassembled_function_hash": "d" * 64,
                    "tlsh_disassembly": None,
                    "tlsh_llil": None,
                }],
                "errors": [], "strings": [],
            }
            result = obj.prepare_export_data("ClickHouseExporter")
            llil_data = result["llil_content"]["data"]
            reg_map = llil_data[0][5]
            assert reg_map == {}