Oshani Seneviratne

166 papers A* 4B 9C 1Misc 7Journal 65Unranked 66
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Oshani Seneviratne, Fernando Spadea, Adrien Pavao, Aaron Micah Green, Kristin P. Bennett
2026 J jnl
CoRR
Fernando Spadea, Oshani Seneviratne
2026 J jnl
J. Data-centric Mach. Learn. Res.
Aaron Green, Zihan Nie, Hanzhen Qin, Oshani Seneviratne, Kristin P. Bennett
2026 A* conf
WWW
Inwon Kang, Parikshit Ram, Yi Zhou, Horst Samulowitz, Oshani Seneviratne
2026 J jnl
CoRR
Inwon Kang, Parikshit Ram, Yi Zhou, Horst Samulowitz, Oshani Seneviratne
2026 J jnl
CoRR
Michael Zuo, Inwon Kang, Stacy Patterson, Oshani Seneviratne
2026 J jnl
CoRR
Oshani Seneviratne, Manan Shukla, Jianjing Lin
2025 A* conf
IJCAI
Maruf Ahmed Mridul, Ian Sloyan, Aparna Gupta, Oshani Seneviratne
2025 J jnl
CoRR
Maruf Ahmed Mridul, Ian Sloyan, Aparna Gupta, Oshani Seneviratne
2025 conf
ICAIF
Fernando Spadea, Oshani Seneviratne
2025 J jnl
CoRR
Fernando Spadea, Oshani Seneviratne
2025 J jnl
CoRR
Fernando Spadea, Oshani Seneviratne
2025 conf
ISWC (Industry/Doctoral Consortium/Posters/Demos)
Fernando Spadea, Oshani Seneviratne
2025 conf
WWW (Companion Volume)
Bijun Wu, Oshani Seneviratne
2025 J jnl
CoRR
Bijun Wu, Oshani Seneviratne
2025 conf
WebSci (Companion)
Fernando Spadea, Oshani Seneviratne
2025 conf
ICAIF
Maruf Ahmed Mridul, Oshani Seneviratne
2025 J jnl
CoRR
Maruf Ahmed Mridul, Oshani Seneviratne
2025 conf
WebSci (Companion)
Oshani Seneviratne, Marc Spaniol, John S. Erickson, Gaël Dias
2025 conf
WWW (Companion Volume)
Oshani Seneviratne, Brendan Capuzzo, William Van Woensel
2025 J jnl
CoRR
Oshani Seneviratne, Brendan Capuzzo, William Van Woensel
2025 J jnl
CoRR
Lorenzo Carta, Fernando Spadea, Oshani Seneviratne
2025 conf
WWW (Companion Volume)
Fernando Spadea, Oshani Seneviratne
2025 J jnl
CoRR
Fernando Spadea, Oshani Seneviratne
2025 J jnl
CoRR
Aaron Green, Zihan Nie, Hanzhen Qin, Oshani Seneviratne, Kristin P. Bennett
2025 conf
WWW (Companion Volume)
Oshani Seneviratne
2025 conf
ISWC (Industry/Doctoral Consortium/Posters/Demos)
Shruthi Chari, Oshani Seneviratne, Prithwish Chakraborty, Pablo Meyer, Deborah L. McGuinness
2025 J jnl
CoRR
Shruthi Chari, Oshani Seneviratne, Prithwish Chakraborty, Pablo Meyer, Deborah L. McGuinness
2025 J jnl
CoRR
Inwon Kang, Parikshit Ram, Yi Zhou, Horst Samulowitz, Oshani Seneviratne
2025 J jnl
Trans. Mach. Learn. Res.
Inwon Kang, Parikshit Ram, Yi Zhou, Horst Samulowitz, Oshani Seneviratne
2025 J jnl
CoRR
Fernando Spadea, Oshani Seneviratne
2025 J jnl
SIGIR Forum
Oshani Seneviratne, Marc Spaniol, John S. Erickson, Gaël Dias
2025 J jnl
CoRR
Maruf Ahmed Mridul, Oshani Seneviratne
2025 J jnl
CoRR
Gautam Kishore Shahi, Oshani Seneviratne, Marc Spaniol
2025 conf
WebSci
Gautam Kishore Shahi, Oshani Seneviratne, Marc Spaniol
2025 conf
WebSci (Companion)
Maruf Ahmed Mridul, Inwon Kang, Oshani Seneviratne
2025 J jnl
CoRR
Maruf Ahmed Mridul, Inwon Kang, Oshani Seneviratne
2025 conf
WWW (Companion Volume)
Oshani Seneviratne
2024 conf
DAPPS
Linh Tran, Sanjay Chari, Md. Saikat Islam Khan, Aaron Zachariah, Stacy Patterson, Oshani Seneviratne
2024 J jnl
CoRR
Linh Tran, Sanjay Chari, Md. Saikat Islam Khan, Aaron Zachariah, Stacy Patterson, Oshani Seneviratne
2024 J jnl
Distributed Ledger Technol. Res. Pract.
Aaron Micah Green, Michael P. Giannattasio, John S. Erickson, Oshani Seneviratne, Kristin P. Bennett
2024 conf
ICHI
Oshani Seneviratne
2024 conf
WebSci
Inwon Kang, Maruf Ahmed Mridul, Abraham Sanders, Yao Ma, Thilanka Munasinghe, Aparna Gupta, Oshani Seneviratne
2024 J jnl
CoRR
Inwon Kang, Maruf Ahmed Mridul, Abraham Sanders, Yao Ma, Thilanka Munasinghe, Aparna Gupta, Oshani Seneviratne
2024 J jnl
Semantic Web
Sabrina Kirrane, Oshani Seneviratne, Michel Dumontier
2024 A* conf
AAAI
Inwon Kang, Parikshit Ram, Yi Zhou, Horst Samulowitz, Oshani Seneviratne
2024 conf
WISE (5)
Noah Kader, Inwon Kang, Oshani Seneviratne
2024 J jnl
CoRR
Noah Kader, Inwon Kang, Oshani Seneviratne
2024 J jnl
Semantic Web
Shruthi Chari, Oshani Seneviratne, Mohamed F. Ghalwash, Sola Shirai, Daniel M. Gruen, Pablo Meyer, Prithwish Chakraborty, Deborah L. McGuinness
2024 conf
CIFEr
Md. Saikat Islam Khan, Aparna Gupta, Oshani Seneviratne, Stacy Patterson
2024 J jnl
CoRR
Md. Saikat Islam Khan, Aparna Gupta, Oshani Seneviratne, Stacy Patterson
2024 conf
CIFEr
Mohamed Lashuel, Gulrukh Kurdistan, Aaron Green, John S. Erickson, Oshani Seneviratne, Kristin P. Bennett
2024 conf
WebSci (Companion)
Fernando Spadea, Oshani Seneviratne
2024 conf
ICMHI
David Fong, Tianshu Chu, Matthew Heflin, Xiaosi Gu, Oshani Seneviratne
2024 J jnl
CoRR
David Fong, Tianshu Chu, Matthew Heflin, Xiaosi Gu, Oshani Seneviratne
2024 ed.
WebSci
Luca Maria Aiello, Yelena Mejova, Oshani Seneviratne, Jun Sun, Sierra Kaiser, Steffen Staab
2024 J jnl
CoRR
William Van Woensel, Oshani Seneviratne
2024 conf
CIFEr
Maruf Ahmed Mridul, Kaiyang Chang, Aparna Gupta, Oshani Seneviratne
2024 J jnl
CoRR
Maruf Ahmed Mridul, Kaiyang Chang, Aparna Gupta, Oshani Seneviratne
2024 conf
DAPPS
Fernando Spadea, Oshani Seneviratne
2024 J jnl
CoRR
Fernando Spadea, Oshani Seneviratne
2024 conf
BCCA
Oshani Seneviratne
2024 J jnl
CoRR
Oshani Seneviratne
2024 J jnl
CoRR
Inwon Kang, William Van Woensel, Oshani Seneviratne
2023 B conf
ESWC
Sabbir M. Rashid, Jamie P. McCusker, Daniel M. Gruen, Oshani Seneviratne, Deborah L. McGuinness
2023 J jnl
ACM Trans. Soc. Comput.
Oshani Seneviratne, Kacy Adams, Deborah L. McGuinness
2023 conf
WWW (Companion Volume)
Kacy Adams, Fernando Spadea, Conor Flynn, Oshani Seneviratne
2023 J jnl
CoRR
Kacy Adams, Fernando Spadea, Conor Flynn, Oshani Seneviratne
2023 conf
MARBLE
Aaron Green, Michael P. Giannattasio, Keran Wang, John S. Erickson, Oshani Seneviratne, Kristin P. Bennett
2023 ch.
Linking the World's Information
Ching-man Au Yeung, Ilaria Liccardi, Kanghao Lu, Oshani Seneviratne, Tim Berners-Lee
2023 B conf
IEEE Big Data
Conor Flynn, Kristin P. Bennett, John S. Erickson, Aaron Green, Oshani Seneviratne
2023 J jnl
CoRR
Conor Flynn, Kristin P. Bennett, John S. Erickson, Aaron Green, Oshani Seneviratne
2023 B conf
CHASE
Oshani Seneviratne
2023 J jnl
Artif. Intell. Medicine
Shruthi Chari, Prasant Acharya, Daniel M. Gruen, Olivia Zhang, Elif K. Eyigöz, Mohamed F. Ghalwash, Oshani Seneviratne, Fernando J. Suarez Saiz, Pablo Meyer, Prithwish Chakraborty, Deborah L. McGuinness
2023 J jnl
CoRR
Shruthi Chari, Prasant Acharya, Daniel M. Gruen, Olivia Zhang, Elif K. Eyigöz, Mohamed F. Ghalwash, Oshani Seneviratne, Fernando J. Suarez Saiz, Pablo Meyer, Prithwish Chakraborty, Deborah L. McGuinness
2023 J jnl
CoRR
Inwon Kang, Sikai Ruan, Tyler Ho, Jui-Chien Lin, Farhad Mohsin, Oshani Seneviratne, Lirong Xia
2023 book
Linking the World's Information
Oshani Seneviratne, James A. Hendler
2023 J jnl
CoRR
Manan Shukla, Oshani Seneviratne
2023 J jnl
CoRR
Matthew T. Pisano, Connor J. Patterson, Oshani Seneviratne
2023 J jnl
J. Biomed. Semant.
Oshani Seneviratne, Amar K. Das, Shruthi Chari, Nkechinyere N. Agu, Sabbir M. Rashid, Jamie P. McCusker, Jade S. Franklin, Miao Qi, Kristin P. Bennett, Ching-Hua Chen, James A. Hendler, Deborah L. McGuinness
2023 Misc conf
FLAIRS
Kacy Adams, Deborah L. McGuinness, Oshani Seneviratne
2023 J jnl
CoRR
Jared Gridley, Oshani Seneviratne
2023 ch.
Linking the World's Information
Oshani Seneviratne, Amy van der Hiel, Lalana Kagal
2023 conf
SeWeBMeDA@ESWC
William Van Woensel, Manan Shukla, Oshani Seneviratne
2023 J jnl
TGDK
Luis-Daniel Ibáñez, John Domingue, Sabrina Kirrane, Oshani Seneviratne, Aisling Third, Maria-Esther Vidal
2023 J jnl
CoRR
Luis-Daniel Ibáñez, John Domingue, Sabrina Kirrane, Oshani Seneviratne, Aisling Third, Maria-Esther Vidal
2023 ch.
Linking the World's Information
Oshani Seneviratne
2023 conf
ESWC Workshops
Oshani Seneviratne, Deborah L. McGuinness
2022 B conf
IEEE Big Data
Inwon Kang, Aparna Gupta, Oshani Seneviratne
2022 J jnl
CoRR
Inwon Kang, Aparna Gupta, Oshani Seneviratne
2022 B conf
AIME
Manan Shukla, Jianjing Lin, Oshani Seneviratne
2022 conf
WebSci
Oshani Seneviratne
2022 B conf
CHASE
Manan Shukla, Jianjing Lin, Oshani Seneviratne
2022 conf
HICSS
Yufei Wu, Thilanka Munasinghe, Lydia Manikonda, Oshani Seneviratne
2022 conf
MARBLE
Aaron Green, Christopher Cammilleri, John S. Erickson, Oshani Seneviratne, Kristin P. Bennett
2022 B conf
AIME
Evan W. Patton, William Van Woensel, Oshani Seneviratne, Giuseppe Loseto, Floriano Scioscia, Lalana Kagal
2022 B conf
AIME
William Van Woensel, Floriano Scioscia, Giuseppe Loseto, Oshani Seneviratne, Evan W. Patton, Samina Abidi, Lalana Kagal
2022 conf
HICSS
Oshani Seneviratne, Deborah L. McGuinness
2022 ed.
DC@ISWC
Olaf Hartig, Oshani Seneviratne
2022 B conf
IEEE Big Data
Jared Gridley, Oshani Seneviratne
2021 J jnl
CoRR
Sola S. Shirai, Oshani Seneviratne, Deborah L. McGuinness
2021 conf
Blockchain
Manan Shukla, Jianjing Lin, Oshani Seneviratne
2021 Misc conf
AMIA
Manan Shukla, Jianjing Lin, Oshani Seneviratne
2021 J jnl
CoRR
Manan Shukla, Jianjing Lin, Oshani Seneviratne
2021 conf
Blockchain
Jonathan Grey, Oshani Seneviratne, Isuru S. Godage
2021 Misc conf
AMIA
Jonathan J. Harris, Deborah L. McGuinness, Marco Monti, Oshani Seneviratne, Mohammed J. Zaki, Ching-Hua Chen
2021 conf
ISWC (Posters/Demos/Industry)
Sola S. Shirai, Oshani Seneviratne, Ching-Hua Chen, Daniel M. Gruen, Deborah L. McGuinness
2021 A* conf
KDD
Ying Ding, Bogdan G. Arsintescu, Ching-Hua Chen, Haoyun Feng, François Scharffe, Oshani Seneviratne, Juan Sequeda
2021 J jnl
CoRR
Shruthi Chari, Prithwish Chakraborty, Mohamed F. Ghalwash, Oshani Seneviratne, Elif K. Eyigöz, Daniel M. Gruen, Fernando J. Suarez Saiz, Ching-Hua Chen, Pablo Meyer Rojas, Deborah L. McGuinness
2021 conf
ISWC (Posters/Demos/Industry)
Giuseppe Loseto, Evan W. Patton, Oshani Seneviratne, William Van Woensel, Floriano Scioscia, Lalana Kagal
2021 J jnl
CoRR
Oshani Seneviratne, Jonathan J. Harris, Ching-Hua Chen, Deborah L. McGuinness
2021 ed.
AI4SG@AAAI Fall Symposium
Hemant Purohit, Oshani Seneviratne, Muhammad Aurangzeb Ahmad
2021 ed.
ISWC (Posters/Demos/Industry)
Oshani Seneviratne, Catia Pesquita, Juan Sequeda, Lorena Etcheverry
2021 conf
ISWC (Posters/Demos/Industry)
Oshani Seneviratne, William Van Woensel, Giuseppe Loseto, Floriano Scioscia, Evan W. Patton, Lalana Kagal
2021 conf
ICDE Workshops
Ishita Padhiar, Oshani Seneviratne, Shruthi Chari, Dan Gruen, Deborah L. McGuinness
2021 J jnl
CoRR
Ishita Padhiar, Oshani Seneviratne, Shruthi Chari, Daniel M. Gruen, Deborah L. McGuinness
2021 Misc conf
ISWC
Evan W. Patton, William Van Woensel, Oshani Seneviratne, Giuseppe Loseto, Floriano Scioscia, Lalana Kagal
2021 Misc conf
AMIA
Shruthi Chari, Prithwish Chakraborty, Oshani Seneviratne, Mohamed F. Ghalwash, Daniel M. Gruen, Daby Sow, Deborah L. McGuinness
2021 ed.
WebSci (Companion)
Oshani Seneviratne, Vivek Singh, Ana Freire, Jar-der Luo
2020 conf
BRAINS
Aparna Gupta, Jyothsna Harithsa, Oshani Seneviratne
2020 conf
AI4SG@AAAI Fall Symposium
Gaurang Prasad, Thilanka Munasinghe, Oshani Seneviratne
2020 conf
ISWC (Demos/Industry)
Nidhi Rastogi, Oshani Seneviratne, Dan Gruen, Ching-Hua Chen, Yu Chen, Jon Harris, Diya Li, Ananya Subburathinam, Ruisi Jian, Megan Goulet, Yuheng Zhou, Osama Minhas, Jared Okun, Aaron Hill
2020 J jnl
CoRR
Shruthi Chari, Daniel M. Gruen, Oshani Seneviratne, Deborah L. McGuinness
2020 ch.
Knowledge Graphs for eXplainable Artificial Intelligence
Shruthi Chari, Daniel M. Gruen, Oshani Seneviratne, Deborah L. McGuinness
2020 conf
ISWC (Demos/Industry)
Shruthi Chari, Oshani Seneviratne, Daniel M. Gruen, Morgan A. Foreman, Amar K. Das, Deborah L. McGuinness
2020 J jnl
CoRR
Shruthi Chari, Oshani Seneviratne, Daniel M. Gruen, Morgan A. Foreman, Amar K. Das, Deborah L. McGuinness
2020 conf
ISWC (2)
Shruthi Chari, Oshani Seneviratne, Daniel M. Gruen, Morgan A. Foreman, Amar K. Das, Deborah L. McGuinness
2020 J jnl
CoRR
Shruthi Chari, Oshani Seneviratne, Daniel M. Gruen, Morgan A. Foreman, Amar K. Das, Deborah L. McGuinness
2020 J jnl
CoRR
Shruthi Chari, Daniel M. Gruen, Oshani Seneviratne, Deborah L. McGuinness
2020 ch.
Knowledge Graphs for eXplainable Artificial Intelligence
Shruthi Chari, Daniel M. Gruen, Oshani Seneviratne, Deborah L. McGuinness
2020 J jnl
Frontiers Artif. Intell.
Sola S. Shirai, Oshani Seneviratne, Minor Gordon, Ching-Hua Chen, Deborah L. McGuinness
2020 conf
WebSci (Companion)
Oshani Seneviratne, Silke Roth
2020 Misc conf
AMIA
Jay D. S. Franklin, Shruthi Chari, Morgan Foreman, Oshani Seneviratne, Daniel M. Gruen, Jamie P. McCusker, Amar K. Das, Deborah L. McGuinness
2020 conf
ASLD@ISWC
Daniel Kazenoff, Oshani Seneviratne, Deborah L. McGuinness
2020 conf
ISWC (Demos/Industry)
Sola S. Shirai, Oshani Seneviratne, Minor Gordon, Ching-Hua Chen, Deborah L. McGuinness
2020 conf
Blockchain
Jonathan Grey, Isuru S. Godage, Oshani Seneviratne
2020 ed.
ISWC (1)
Jeff Z. Pan, Valentina Tamma, Claudia d'Amato, Krzysztof Janowicz, Bo Fu, Axel Polleres, Oshani Seneviratne, Lalana Kagal
2020 ed.
ISWC (2)
Jeff Z. Pan, Valentina Tamma, Claudia d'Amato, Krzysztof Janowicz, Bo Fu, Axel Polleres, Oshani Seneviratne, Lalana Kagal
2019 conf
Blockchain
Yanlin Zhu, Lirong Xia, Oshani Seneviratne
2019 conf
ICSC
WeiHua James Li, Oshani Seneviratne, Evan W. Patton, Lalana Kagal
2019 conf
SAWSemStats@ISWC
Alexander New, Miao Qi, Shruthi Chari, Sabbir M. Rashid, Oshani Seneviratne, Jamie P. McCusker, John S. Erickson, Deborah L. McGuinness, Kristin P. Bennett
2019 conf
SeWeBMeDa@ISWC
Oshani Seneviratne, Amar K. Das, Shruthi Chari, Nkechinyere N. Agu, Sabbir M. Rashid, Ching-Hua Chen, Jamie P. McCusker, James A. Hendler, Deborah L. McGuinness
2019 conf
ISWC (Satellites)
Steven Haussmann, Yu Chen, Oshani Seneviratne, Nidhi Rastogi, James V. Codella, Ching-Hua Chen, Deborah L. McGuinness, Mohammed J. Zaki
2019 conf
ISWC (2)
Steven Haussmann, Oshani Seneviratne, Yu Chen, Yarden Ne'eman, James V. Codella, Ching-Hua Chen, Deborah L. McGuinness, Mohammed J. Zaki
2019 conf
SeWeBMeDa@ISWC
Nkechinyere N. Agu, Neha Keshan, Shruthi Chari, Oshani Seneviratne, Jamie P. McCusker, Deborah L. McGuinness
2019 conf
IEEE BigData
Thilanka Munasinghe, Evan W. Patton, Oshani Seneviratne
2019 conf
DAPPCON
Mengyi Li, Lirong Xia, Oshani Seneviratne
2019 conf
ISWC (2)
Shruthi Chari, Miao Qi, Nkechinyere N. Agu, Oshani Seneviratne, Jamie P. McCusker, Kristin P. Bennett, Amar K. Das, Deborah L. McGuinness
2019 J jnl
CoRR
Shruthi Chari, Miao Qi, Nkechinyere N. Agu, Oshani Seneviratne, Jamie P. McCusker, Kristin P. Bennett, Amar K. Das, Deborah L. McGuinness
2019 conf
BlockSW/CKG@ISWC
Farhad Mohsin, Xingjian Zhao, Zhuo Hong, Geeth de Mel, Lirong Xia, Oshani Seneviratne
2019 conf
ISWC (Satellites)
Shruthi Chari, Miao Qi, Nkechinyere N. Agu, Oshani Seneviratne, Jamie P. McCusker, Kristin P. Bennett, Amar K. Das, Deborah L. McGuinness
2019 J jnl
AI Mag.
Yolanda Gil, Biplav Srivastava, Ching-Hua Chen, Oshani Seneviratne
2019 J jnl
AI Mag.
Ching-Hua Chen, James A. Hendler, Sabbir M. Rashid, Oshani Seneviratne, Daby Sow, Biplav Srivastava
2019 J jnl
AI Mag.
Arvind Gupta, Biplav Srivastava, Daby Sow, Ching-Hua Chen, Oshani Seneviratne
2019 conf
DAPPCON
Shuze Liu, Farhad Mohsin, Lirong Xia, Oshani Seneviratne
2018 conf
ISWC (2)
Oshani Seneviratne, Sabbir M. Rashid, Shruthi Chari, Jamie P. McCusker, Kristin P. Bennett, James A. Hendler, Deborah L. McGuinness
2018 J jnl
CoRR
Oshani Seneviratne, Sabbir M. Rashid, Shruthi Chari, Jamie P. McCusker, Kristin P. Bennett, James A. Hendler, Deborah L. McGuinness
2018 conf
ISWC (P&D/Industry/BlueSky)
Oshani Seneviratne, Sabbir M. Rashid, Shruthi Chari, Jamie P. McCusker, Kristin P. Bennett, Jim Hendler, Deborah L. McGuinness
2017 ch.
Emerging Research, Practice, and Policy on Computational Thinking
Oshani Seneviratne
2015 J jnl
AI Mag.
Nitin Agarwal, Sean Andrist, Dan Bohus, Fei Fang, Laurie Fenstermacher, Lalana Kagal, Takashi Kido, Christopher Kiekintveld, William F. Lawless, Huan Liu, Andrew McCallum, Hemant Purohit, Oshani Seneviratne, Keiki Takadama, Gavin Taylor
2014 conf
ISWC (Posters & Demos)
Oshani Seneviratne, Evan W. Patton, Daniela Miao, Fuming Shih, Weihua Li, Lalana Kagal, Carlos Castillo
2014 C conf
PST
Oshani Seneviratne, Lalana Kagal
2013 conf
AIIP/Semantic Cities@IJCAI
Fuming Shih, Oshani Seneviratne, Ilaria Liccardi, Evan W. Patton, Patrick Meier, Carlos Castillo
2012 conf
IEEE Symposium on Security and Privacy Workshops
Sharon Paradesi, Oshani Seneviratne, Lalana Kagal
2011 conf
POLICY
Oshani Seneviratne, Lalana Kagal
2009 Misc conf
ISWC
Oshani Seneviratne, Lalana Kagal, Tim Berners-Lee
redb/extractors/pe_extractors/pe_dotnet.py
← Index redb/extractors/pe_extractors/pe_dotnet.py python
import inspect
import pefile
from dotnetfile import DotNetPE

import base64
from hashlib import md5
from pprint import pprint

import magic
import pefile

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEDotNet
from datetime import datetime, timezone
import json
from typing import Any


class PEDotNetExtractor(PEExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        # self.pe_features = None
        self.elastic_index = self.index_prefix + "-pe_dotnet"
        self.dotnet, self.error = self._generate_dotnetfile_object()
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _decode_assembly_flags(self, flag_value):
        self.log.debug(inspect.currentframe().f_code.co_name)
        ASSEMBLY_FLAGS = {
            0x00000001: "COMIMAGE_FLAGS_ILONLY",
            0x00000002: "COMIMAGE_FLAGS_32BITREQUIRED",
            0x00000004: "COMIMAGE_FLAGS_IL_LIBRARY",
            0x00000008: "COMIMAGE_FLAGS_STRONGNAMESIGNED",
            0x00000010: "COMIMAGE_FLAGS_NATIVE_ENTRYPOINT",
            0x00010000: "COMIMAGE_FLAGS_TRACKDEBUGDATA",
            0x00020000: "COMIMAGE_FLAGS_32BITPREFERRED",
        }
        flags = []
        for bit, name in ASSEMBLY_FLAGS.items():
            if flag_value & bit:
                flags.append(name)
        return flags

    def _normalize_data(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            return {"value": data}
        return data

    def _compute_md5(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            # If it's a string, encode it to first
            return md5(data.encode("raw_unicode_escape")).hexdigest()
        elif not isinstance(data, bytes):
            # If it's neither string nor bytes, convert it to string and then to bytes
            return md5(str(data).encode("raw_unicode_escape")).hexdigest()
        else:
            return md5(data).hexdigest()

    def tag(self):
        return Tag.PE_DOTNET.value

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        metadata = {}

        if self.error:
            metadata["Corrupted"] = self.error.args[0]
            dotnet = PEDotNet(metadata)
            self.dotnet = dotnet  # Store for later use in prepare_export_data
            return dotnet  # Return the extracted data instead of exporting directly

        metadata["info"] = {}
        try:
            available_tables = self.dotnet.existent_metadata_tables()
        except Exception as e:
            self.log.error(f"Error getting metadata tables for {self.hash.sha256}: {e}")
            available_tables = []
            metadata["info"]["PotentiallyCorrupted"] = True

        # GUID extraction
        try:
            input_string = self.dotnet.guid_stream_guids[0].string_representation
            
            formatted_uuid = (
                f"{input_string[6:8]}{input_string[4:6]}{input_string[2:4]}{input_string[0:2]}"
                f"-{input_string[10:12]}{input_string[8:10]}"
                f"-{input_string[14:16]}{input_string[12:14]}"
                f"-{input_string[16:20]}"
                f"-{input_string[20:]}"
            )
            metadata["info"]["ModuleVersionID"] = formatted_uuid
        except Exception as e:
            self.log.error(f"Error extracting GUID for {self.hash.sha256}: {e}")

        # CLR Version
        try:
            metadata["info"]["CLRversion"] = self.dotnet.get_runtime_target_version()
        except Exception as e:
            self.log.error(f"Error getting CLR version for {self.hash.sha256}: {e}")

        # Module information
        try:
            if self.dotnet.metadata_table_exists("Module"):
                metadata["info"]["AssemblyModuleName"] = self.dotnet.Module.get_module_name()
        except Exception as e:
            self.log.error(f"Error getting module info for {self.hash.sha256}: {e}")

        # Basic properties
        try:
            metadata["info"].update({
                "IsNativeNgenImage": self.dotnet.is_native_image(),
                "IsMixedAssembly": self.dotnet.is_mixed_assembly(),
                "IsWindowsFormsApp": self.dotnet.is_windows_forms_app(),
                "EntryPointToken": self.dotnet.clr_header.EntryPointToken.value,
                "HasNativeEntryPoint": self.dotnet.has_native_entry_point(),
            })
        except Exception as e:
            self.log.error(f"Error getting basic properties for {self.hash.sha256}: {e}")

        # Assembly flags
        try:
            metadata["info"]["AssemblyFlags"] = self._decode_assembly_flags(
                self.dotnet.clr_header.Flags.value
            )
        except Exception as e:
            self.log.error(f"Error getting assembly flags for {self.hash.sha256}: {e}")

        # More Metadata/Info CLR Header
        try:
            metadata["info"]["NumOfStreams"] = self.dotnet.get_number_of_streams()
            # [TODO] The following two on VT are "RVA entry point"
            #  and "Resources va" respectively. To verify.
            metadata["info"][
                "ResourcesDirectoryAddress"
            ] = self.dotnet.clr_header.ResourcesDirectoryAddress.value
            metadata["info"][
                "ResourcesDirectorySize"
            ] = self.dotnet.clr_header.ResourcesDirectorySize.value
            metadata["info"][
                "StrongNameSignatureAddress"
            ] = self.dotnet.clr_header.StrongNameSignatureAddress.value
            metadata["info"][
                "StrongNameSignatureSize"
            ] = self.dotnet.clr_header.StrongNameSignatureSize.value
            metadata["info"][
                "CodeManagerTableAddress"
            ] = self.dotnet.clr_header.CodeManagerTableAddress.value
            metadata["info"][
                "CodeManagerTableSize"
            ] = self.dotnet.clr_header.CodeManagerTableSize.value
            metadata["info"][
                "VTableFixupsAddress"
            ] = self.dotnet.clr_header.VTableFixupsAddress.value
            metadata["info"][
                "VTableFixupsSize"
            ] = self.dotnet.clr_header.VTableFixupsSize.value
            metadata["info"][
                "ExportAddressTableJumpsAddress"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsAddress.value
            metadata["info"][
                "ExportAddressTableJumpsSize"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsSize.value
            metadata["info"][
                "ManagedNativeHeaderAddress"
            ] = self.dotnet.clr_header.ManagedNativeHeaderAddress.value
            metadata["info"][
                "ManagedNativeHeaderSize"
            ] = self.dotnet.clr_header.ManagedNativeHeaderSize.value
        except Exception as e:
            self.log.error(f"Error getting more metadata/info clr header for {self.hash.sha256}: {e}")

        # Streams section
        try:
            metadata["Streams"] = {}
            stream_names = self.dotnet.get_stream_names()
            for name in stream_names:
                indx = stream_names.index(name)
                stream_header = self.dotnet.dotnet_stream_headers[indx]
                stream_address = self.dotnet.dotnet_streams[indx].address
                metadata["Streams"][name] = {}
                metadata["Streams"][name]["raw_name"] = base64.b64encode(
                    stream_header.Name.value
                ).decode()
                # metadata["Streams"][name]["raw_name"] = name
                metadata["Streams"][name]["size"] = stream_header.Size.value
                # Retrieve the stream data directly using the given address and size
                stream_data = self.pe.get_data(stream_address, stream_header.Size.value)
                metadata["Streams"][name]["entropy"] = (
                    "%.2f" % pefile.SectionStructure.entropy_H(self.pe, stream_data)
                )
                metadata["Streams"][name]["md5"] = md5(stream_data).hexdigest()
        except Exception as e:
            self.log.error(f"Error getting streams for {self.hash.sha256}: {e}")

        # ManifestResource
        try:
            metadata["ManifestResource"] = ()
            if "ManifestResource" in available_tables:
                metadata["info"]["HasManifestResource"] = True
                metadata["ManifestResource"] = (
                    self.dotnet.ManifestResource.get_resource_names()
                )
        except Exception as e:
            self.log.error(f"Error getting manifest resource for {self.hash.sha256}: {e}")

        # ExternalAssemblyRef
        try:
            metadata["ExternalAssemblyRef"] = {}
            if "AssemblyRef" in available_tables:
                metadata["ExternalAssemblyRef"][
                    "names"
                ] = self.dotnet.AssemblyRef.get_assemblyref_names()
                metadata["ExternalAssemblyRef"][
                    "cultures"
                ] = self.dotnet.AssemblyRef.get_assemblyref_cultures()
        except Exception as e:
            self.log.error(f"Error getting external assembly ref for {self.hash.sha256}: {e}")

        # AssemblyData
        try:
            metadata["AssemblyData"] = {}
            if "Assembly" in available_tables:
                metadata["AssemblyData"][
                    "name"
                ] = self.dotnet.Assembly.get_assembly_name()
                # It's officially a one-row table, but there are ITW files with more than one row.
                # It stores information about the current assembly. It is documented in ECMA-335.
                assembly_table = self.dotnet.metadata_tables_lookup[
                    "Assembly"
                ].table_rows[0]
                metadata["AssemblyData"][
                    "MajorVersion"
                ] = assembly_table.MajorVersion.value
                metadata["AssemblyData"][
                    "MinorVersion"
                ] = assembly_table.MinorVersion.value
                metadata["AssemblyData"]["hashalgid"] = assembly_table.HashAlgId.value
                metadata["AssemblyData"][
                    "BuildNumber"
                ] = assembly_table.BuildNumber.value
                metadata["AssemblyData"][
                    "RevisionNumber"
                ] = assembly_table.RevisionNumber.value
                metadata["AssemblyData"][
                    "culture"
                ] = self.dotnet.Assembly.get_assembly_culture()
        except Exception as e:
            self.log.error(f"Error getting assembly data for {self.hash.sha256}: {e}")

        # TypeDef handling
        try:
            metadata["TypeDef"] = {}
            if "TypeDef" in available_tables:
                metadata["info"]["HasTypeDef"] = True
                # Get basic type definitions
                try:
                    # Get all types (ANY visibility)
                    type_defs = self.dotnet.TypeDef.get_type_names()
                    metadata["TypeDef"]["names"] = type_defs if type_defs else []
                    
                    # Get detailed type information with methods
                    types_with_methods = self.dotnet.TypeDef.get_type_names_with_methods()
                    if types_with_methods:
                        metadata["TypeDef"]["detailed"] = []
                        for type_info in types_with_methods:
                            type_data = {
                                "type": type_info.Type,
                                "namespace": type_info.Namespace,
                                "flags": type_info.Flags,
                                "methods": []
                            }
                            for method in type_info.Methods:
                                method_data = {
                                    "name": method.Name,
                                    "flags": method.Flags
                                }
                                if method.Signature:
                                    method_data["signature"] = {
                                        "parameters": method.Signature.get("parameter", []),
                                        "return_type": method.Signature.get("return", ""),
                                        "has_this": method.Signature.get("hasthis", False)
                                    }
                                type_data["methods"].append(method_data)
                            metadata["TypeDef"]["detailed"].append(type_data)
                except AttributeError as e:
                    self.log.warning(f"TypeDef table exists but attributes missing for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = f"Missing attributes: {str(e)}"
                except Exception as e:
                    self.log.error(f"Error parsing TypeDef table for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = str(e)
        except Exception as e:
            self.log.error(f"Error handling TypeDef section for {self.hash.sha256}: {e}")
            metadata["TypeDef"] = {"names": [], "detailed": []}
            # metadata["info"]["TypeDefParsingError"] = str(e)

        # ExternalUnmanagedModules
        try:
            metadata["ExternalUnmanagedModules"] = ()
            if "ModuleRef" in available_tables:
                metadata["info"]["HasModuleRef"] = True
                metadata["ExternalUnmanagedModules"] = (
                    self.dotnet.ModuleRef.get_unmanaged_module_names(
                        self.dotnet.Type.UnmanagedModules.RAW
                    )
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged modules for {self.hash.sha256}: {e}")

        # ExternalUnmanagedMethods
        try:
            metadata["ExternalUnmanagedMethods"] = ()
            if "ImplMap" in available_tables:
                metadata["info"]["HasImplMap"] = True
                metadata["ExternalUnmanagedMethods"] = (
                    self.dotnet.ImplMap.get_unmanaged_functions()
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged methods for {self.hash.sha256}: {e}")

        # Event
        try:
            metadata["Event"] = ()
            if "Event" in available_tables:
                metadata["info"]["HasEvent"] = True
                metadata["Event"] = self.dotnet.Event.get_event_names()
        except Exception as e:
            self.log.error(f"Error getting event for {self.hash.sha256}: {e}")

        # Resources
        try:
            metadata["Resources"] = []
            if self.dotnet.has_resources():
                tmp_resources_list = []
                resource_data = self.dotnet.get_resources()
                for data in resource_data:
                    tmp_dict = {}
                    for resource_item in data.items():
                        if resource_item[0] == "SubResources":
                            if resource_item[1]:
                                tmp_dict["SubResources"] = {}
                                for sub_resource in resource_item[1]:
                                    for sub_resource_item in sub_resource.items():
                                        if sub_resource_item[0] == "Data":
                                            # Check if data is a sequence type that supports len()
                                            if hasattr(sub_resource_item[1], '__len__') and len(sub_resource_item[1]) > 100:
                                                tmp_dict["SubResources"]["Data"] = {}
                                                try:
                                                    # tmp_dict["SubResources"]["Data"][
                                                    #     "md5"
                                                    # ] = md5(
                                                    #     sub_resource_item[1].encode()
                                                    # ).hexdigest()
                                                    tmp_dict["SubResources"]["Data"][
                                                        "md5"
                                                    ] = self._compute_md5(
                                                        sub_resource_item[1]
                                                    )
                                                except Exception as e:
                                                    self.log.error(
                                                        f"Error in dotnet resources"
                                                        f" extraction {self.hash.sha256}: {e}"
                                                    )
                                                guess = magic.from_buffer(
                                                    sub_resource_item[1], mime=True
                                                )
                                                tmp_dict["SubResources"]["Data"][
                                                    "MimeType"
                                                ] = (guess if guess else None)
                                            else:
                                                normalized_data = self._normalize_data(
                                                    sub_resource_item[1].decode()
                                                    if isinstance(
                                                        sub_resource_item[1], bytes
                                                    )
                                                    else sub_resource_item[1]
                                                )
                                                tmp_dict["SubResources"][
                                                    sub_resource_item[0]
                                                ] = normalized_data
                                        else:
                                            tmp_dict["SubResources"][
                                                sub_resource_item[0]
                                            ] = (
                                                sub_resource_item[1].decode()
                                                if isinstance(
                                                    sub_resource_item[1], bytes
                                                )
                                                else sub_resource_item[1]
                                            )
                        elif resource_item[0] == "Data":
                            # Check if data is a sequence type that supports len()
                            if hasattr(resource_item[1], '__len__') and len(resource_item[1]) > 100:
                                tmp_dict["Data"] = {}
                                tmp_dict["Data"]["md5"] = self._compute_md5(
                                    resource_item[1]
                                )
                                guess = magic.from_buffer(resource_item[1], mime=True)
                                tmp_dict["Data"]["MimeType"] = guess if guess else None
                            else:
                                normalized_data = self._normalize_data(
                                    resource_item[1].decode()
                                    if isinstance(resource_item[1], bytes)
                                    else resource_item[1]
                                )
                                tmp_dict["Data"] = normalized_data
                        else:
                            tmp_dict[resource_item[0]] = (
                                resource_item[1].decode()
                                if isinstance(resource_item[1], bytes)
                                else resource_item[1]
                            )
                    tmp_resources_list.append(tmp_dict)
                metadata["Resources"] = tmp_resources_list
        except Exception as e:
            self.log.error(f"Error getting resources for {self.hash.sha256}: {e}")
            metadata["Resources"] = []  # Ensure we always have a valid list even on error

        dotnet = PEDotNet(metadata)
        self.dotnet = dotnet  # Store for later use in prepare_export_data
        return dotnet  # Return the extracted data instead of exporting directly


    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.dotnet
        elif exporter_type == "ClickHouseExporter":
            # Convert metadata to JSON string
            metadata_json = json.dumps(self.dotnet.dotnet)
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                metadata_json,
                datetime.now(timezone.utc)
            ]]
            
            column_names = [
                'sha256', 'md5', 'sha1', 'dotnet', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'String', 'String', 'String', 'JSON', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_pe_dotnet"