Ioannis Papaefstathiou

164 papers A* 2A 14B 18C 22Misc 11Journal 48Unranked 48
YearRankTypeTitle / Venue / Authors
2026 J jnl
Integr.
Angelos Athanasiadis, Nikolaos Tampouratzis, Ioannis Papaefstathiou
2025 B conf
SRDS
Theodore B. Zahariadis, Artemis C. Voulkidis, Ilias Nektarios Seitanidis, Andreas E. Papadakis, Alberto del Río, Javier Serrano, David Jiménez, Antonio Pastor, Diego R. López, Alejandro Muñiz, Mattin Antartiko Elorza Forcada, Ana Méndez, Wafa Ben Jaballah, Rosaria Rossini, Maria Belesioti, Ioannis P. Chochliouros, Marco Angelini, Vasileios Megalooikonomou, Carmela Occhipinti, Luigi Briguglio, Alexandru Plesa, Vladut Dinu, Mohammad Ghoreishi, Mostafa Jabari, Dimitrios Skias, Konstantinos Sakatis, Ioannis Papaefstathiou
2025 J jnl
J. Supercomput.
Nikolaos Tampouratzis, Ioannis Papaefstathiou, Gabriel Gomez-Lopez, Miguel Sánchez de la Rosa, Jesús Escudero-Sahuquillo, Pedro Javier García
2025 J jnl
CoRR
Angelos Athanasiadis, Nikolaos Tampouratzis, Ioannis Papaefstathiou
2025 J jnl
CoRR
Orestis Tsirakis, Konstantinos Fysarakis, Vasileios Mavroeidis, Ioannis Papaefstathiou
2025 J jnl
Comput. Secur.
Orestis Tsirakis, Konstantinos Fysarakis, Vasileios Mavroeidis, Ioannis Papaefstathiou
2024 J jnl
WiPiEC Journal
Angelos Athanasiadis, Nikolaos Tampouratzis, Ioannis Papaefstathiou
2024 A conf
HPDC
Nikolaos Tampouratzis, Ioannis Papaefstathiou
2024 C conf
DSD
Andreas Brokalakis, Iakovos Mavroidis, Konstantinos Georgopoulos, Pavlos Malakonakis, Konstantinos Harteros, Dimitris Andronikou, Yannis Galanomatis, Charalampos Savvakos, Grigorios Chrysos, Sotiris Ioannidis, Ioannis Papaefstathiou
2023 J jnl
IEEE Trans. Parallel Distributed Syst.
Nikolaos Tampouratzis, Panagiotis Mousouliotis, Ioannis Papaefstathiou
2023 conf
CF
Dimitris Theodoropoulos, Giorgos Pekridis, Panagiotis Miliadis, Chloe Alverti, Panagiotis Mpakos, Dionisios N. Pnevmatikatos, Pavlos Malakonakis, Konstantinos Georgopoulos, Iakovos Mavroidis, Gino Perna, Marisa Zanotti, Giovanni Isotton, Max Engelen, Aggelos Ioannou, Ioannis Papaefstathiou, Albert Njoroge Kahira, Andreas Herten
2023 A conf
DATE
Dimitris Theodoropoulos, Olivier Michel, Pavlos Malakonakis, Konstantinos Georgopoulos, Giovanni Isotton, Dionisios N. Pnevmatikatos, Ioannis Papaefstathiou, Gino Perna, Marisa Zanotti, Panagiotis Miliadis, Panagiotis Mpakos, Chloe Alverti, Aggelos Ioannou, Max Engelen, Albert Njoroge Kahira, Iakovos Mavroidis
2023 conf
ICAT
Panagiotis Mousouliotis, Nikolaos Tampouratzis, Ioannis Papaefstathiou
2023 C conf
DSD
Ramon Canal, Cristiano Pegoraro Chenet, Aggelos Arelakis, José-María Arnau, Josep Lluís Berral, Aaron Call, Stefano Di Carlo, Juan José Costa, Dimitris Gizopoulos, Vasileios Karakostas, Francesco Lubrano, Konstantinos Nikas, Yiannis Nikolakopoulos, Beatriz Otero, George Papadimitriou, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos, Daniel Raho, Alvise Rigo, Eva Rodríguez, Alessandro Savino, Alberto Scionti, Nikolaos Tampouratzis, Alex Torregrosa
2023 J jnl
CoRR
Aggelos Arelakis, José-María Arnau, Josep Lluis Berral, Aaron Call, Ramon Canal, Stefano Di Carlo, Juan José Costa, Dimitris Gizopoulos, Vasileios Karakostas, Francesco Lubrano, Konstantinos Nikas, Yiannis Nikolakopoulos, Beatriz Otero, George Papadimitriou, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos, Daniel Raho, Alvise Rigo, Eva Rodríguez, Alessandro Savino, Alberto Scionti, Nikolaos Tampouratzis, Antonio J. Torregrosa
2023 conf
CF
Lluc Alvarez, Abraham Ruiz, Arnau Bigas-Soldevilla, Pavel Kuroedov, Alberto González, Hamsika Mahale, Noe Bustamante, Albert Aguilera, Francesco Minervini, Javier Salamero, Oscar Palomar, Vassilis Papaefstathiou, Antonis Psathakis, Nikolaos Dimou, Michalis Giaourtas, Iasonas Mastorakis, Georgios Ieronymakis, Georgios-Michail Matzouranis, Vassilis Flouris, Nick Kossifidis, Manolis Marazakis, Bhavishya Goel, Madhavan Manivannan, Ahsen Ejaz, Panagiotis Strikos, Mateo Vázquez, Ioannis Sourdis, Pedro Trancoso, Per Stenström, Jens Hagemeyer, Lennart Tigges, Nils Kucza, Jean-Marc Philippe, Ioannis Papaefstathiou
2022 C conf
ISCC
Marios Adam Sirgiannis, Charalampos Manifavas, Ioannis Papaefstathiou
2021 C conf
DS-RT
Vasilis Daoulas, Nikolaos Tampouratzis, Panagiotis Mousouliotis, Ioannis Papaefstathiou
2021 J jnl
ACM Trans. Comput. Heal.
Konstantinos Malavazos, Maria Papadogiorgaki, Pavlos Malakonakis, Ioannis Papaefstathiou
2020 J jnl
ACM Trans. Archit. Code Optim.
Nikolaos Tampouratzis, Ioannis Papaefstathiou, Antonios Nikitakis, Andreas Brokalakis, Stamatis Andrianakis, Apostolos Dollas, Marco Marcon, Emanuele Plebani
2020 A conf
DATE
Konstantinos Malavazos, Maria Papadogiorgaki, Pavlos Malakonakis, Ioannis Papaefstathiou
2020 Misc conf
FCCM
Panagiotis Mousouliotis, Ioannis Papaefstathiou, Loukas Petrou
2020 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Aggelos D. Ioannou, Konstantinos Georgopoulos, Pavlos Malakonakis, Dionisios N. Pnevmatikatos, Vassilis D. Papaefstathiou, Ioannis Papaefstathiou, Iakovos Mavroidis
2019 J jnl
IEEE Trans. Biomed. Circuits Syst.
Antonis Nikitakis, Konstantinos Makantasis, Nikolaos Tampouratzis, Ioannis Papaefstathiou
2019 B conf
FPL
Petros Toupas, Andreas Brokalakis, Ioannis Papaefstathiou
2019 C conf
DSD
Panos Kalodimas, Antonis Nikitakis, Ioannis Papaefstathiou
2019 conf
SAMOS
Aggelos D. Ioannou, Pavlos Malakonakis, Konstantinos Georgopoulos, Ioannis Papaefstathiou, Apostolos Dollas, Iakovos Mavroidis
2018 J jnl
IEEE Trans. Multi Scale Comput. Syst.
Nikolaos Tampouratzis, Ioannis Papaefstathiou
2018 J jnl
J. Cryptogr. Eng.
George Hatzivasilis, Konstantinos Fysarakis, Ioannis Papaefstathiou, Charalampos Manifavas
2018 J jnl
Appl. Intell.
George Hatzivasilis, Ioannis Papaefstathiou, Dimitris Plexousakis, Charalampos Manifavas, Nikos Papadakis
2018 Misc conf
ICIN
Andreas Brokalakis, Nikolaos Tampouratzis, Antonios Nikitakis, Ioannis Papaefstathiou, Stamatis Andrianakis, Apostolos Dollas, Marco Paracchini, Marco Marcon, Danilo Pietro Pau, Emanuele Plebani
2018 C conf
DSD
Andreas Brokalakis, Nikolaos Tampouratzis, Antonios Nikitakis, Ioannis Papaefstathiou, Stamatis Andrianakis, Danilo Pau, Emanuele Plebani, Marco Paracchini, Marco Marcon, Ioannis Sourdis, Prajith Ramakrishnan Geethakumari, Maria Carmen Palacios, Miguel Ángel Antón, Attila Szasz
2018 conf
ARC
Konstantinos Georgopoulos, Pavlos Malakonakis, Nikolaos Tampouratzis, Antonis Nikitakis, Grigorios Chrysos, Apostolos Dollas, Dionysios N. Pnevmatikatos, Ioannis Papaefstathiou
2018 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Konstantinos Makantasis, Antonios Nikitakis, Anastasios D. Doulamis, Nikolaos D. Doulamis, Ioannis Papaefstathiou
2018 conf
NTMS
Andreas Brokalakis, Ioannis Chondroulis, Ioannis Papaefstathiou
2018 conf
ARC
Pavlos Malakonakis, Konstantinos Georgopoulos, Aggelos Ioannou, Luciano Lavagno, Ioannis Papaefstathiou, Iakovos Mavroidis
2018 conf
ICC
Emmanouil Palavras, Konstantinos Fysarakis, Ioannis Papaefstathiou, Ioannis G. Askoxylakis
2018 J jnl
Comput. Commun.
George Hatzivasilis, Konstantinos Fysarakis, Othonas Soultatos, Ioannis G. Askoxylakis, Ioannis Papaefstathiou, Giorgos Demetriou
2018 J jnl
Future Gener. Comput. Syst.
Konstantinos Fysarakis, Othonas Soultatos, Charalampos Manifavas, Ioannis Papaefstathiou, Ioannis G. Askoxylakis
2017 Misc conf
FCCM
Emmanouil Kousanakis, Apostolos Dollas, Euripides Sotiriades, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos, Athanasia Papoutsi, Panagiotis C. Petrantonakis, Panayiota Poirazi, Spyridon Chavlis, George Kastellakis
2017 B conf
DCOSS
Andreas Brokalakis, Nikolaos Tampouratzis, Antonis Nikitakis, Stamatis Andrianakis, Ioannis Papaefstathiou, Apostolos Dollas
2017 C conf
ISCC
Sotirios Katsikeas, Konstantinos Fysarakis, Andreas I. Miaoudakis, Amaury Van Bemten, Ioannis G. Askoxylakis, Ioannis Papaefstathiou, Anargyros Plemenos
2017 conf
MECO
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas
2017 J jnl
IEEE Internet Things J.
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas
2017 C conf
ISCC
George Hatzivasilis, Ioannis Papaefstathiou, Konstantinos Fysarakis, Ioannis G. Askoxylakis
2016 A conf
DATE
Antonis Nikitakis, Ioannis Papaefstathiou, Konstantinos Makantasis, Anastasios D. Doulamis
2016 J jnl
ACM Trans. Archit. Code Optim.
Nikolaos Tampouratzis, Pavlos M. Mattheakis, Ioannis Papaefstathiou
2016 A conf
DATE
Iakovos Mavroidis, Ioannis Papaefstathiou, Luciano Lavagno, Dimitrios S. Nikolopoulos, Dirk Koch, John Goodacre, Ioannis Sourdis, Vassilis Papaefstathiou, Marcello Coppola, Manuel Palomino
2016 J jnl
Comput.
Konstantinos Kalaitzis, Evripidis Sotiriadis, Ioannis Papaefstathiou, Apostolos Dollas
2016 A conf
DATE
Antonis Nikitakis, Ioannis Papaefstathiou
2016 C conf
EDUCON
Ioannis Papaefstathiou
2016 J jnl
Inf. Secur. J. A Glob. Perspect.
George Hatzivasilis, George Floros, Ioannis Papaefstathiou, Charalampos Manifavas
2016 J jnl
IEEE Softw.
Konstantinos Fysarakis, Damianos Mylonakis, Charalampos Manifavas, Ioannis Papaefstathiou
2016 J jnl
IEEE Pervasive Comput.
Konstantinos Fysarakis, George Hatzivasilis, Charalampos Manifavas, Ioannis Papaefstathiou
2016 J jnl
IEEE Softw.
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas
2016 B conf
GLOBECOM
Konstantinos Fysarakis, Ioannis G. Askoxylakis, Othonas Soultatos, Ioannis Papaefstathiou, Charalampos Manifavas, Vasilios Katos
2015 conf
ARC
Pavlos Giakoumakis, Grigorios Chrysos, Apostolos Dollas, Ioannis Papaefstathiou
2015 conf
ARC
Ioannis Papaefstathiou, Gregory Chrysos, Lambros Sarakis
2015 J jnl
Secur. Commun. Networks
Charalampos Manifavas, Konstantinos Fysarakis, Alexandros Papanikolaou, Ioannis Papaefstathiou
2015 J jnl
Microprocess. Microsystems
Dionisios N. Pnevmatikatos, Kyprianos Papadimitriou, Tobias Becker, Peter Böhm, Andreas Brokalakis, Karel Bruneel, Catalin Bogdan Ciobanu, Tom Davidson, Georgi Gaydadjiev, Karel Heyse, Wayne Luk, Xinyu Niu, Ioannis Papaefstathiou, Danilo Pau, Oliver Pell, Christian Pilato, Marco D. Santambrogio, Donatella Sciuto, Dirk Stroobandt, Tim Todman, Elias Vansteenkiste
2015 C conf
WISTP
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas, Ioannis G. Askoxylakis
2015 J jnl
CoRR
Konstantinos Fysarakis, Damianos Mylonakis, Charalampos Manifavas, Ioannis Papaefstathiou
2015 J jnl
IACR Cryptol. ePrint Arch.
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas
2015 C conf
WISTP
Konstantinos Fysarakis, Charalampos Konstantourakis, Konstantinos Rantos, Charalampos Manifavas, Ioannis Papaefstathiou
2014 conf
NTMS
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas, Nikos Papadakis
2014 A conf
DATE
Antonis Nikitakis, Theofilos Paganos, Ioannis Papaefstathiou
2014 conf
ARC
Dionisios N. Pnevmatikatos, Tobias Becker, Andreas Brokalakis, Georgi Nedeltchev Gaydadjiev, Wayne Luk, Kyprianos Papadimitriou, Ioannis Papaefstathiou, Danilo Pau, Oliver Pell, Christian Pilato, Marco D. Santambrogio, Donatella Sciuto, Dirk Stroobandt
2014 conf
ICC
Panagiotis Karkazis, Ioannis Papaefstathiou, Lambros Sarakis, Theodore B. Zahariadis, Terpsichori-Helen N. Velivasaki, Dimitrios Bargiotas
2014 B conf
FPL
Athanasios Stratikopoulos, Grigorios Chrysos, Ioannis Papaefstathiou, Apostolos Dollas
2014 C conf
AICCSA
George Hatzivasilis, Ioannis Papaefstathiou, Charalampos Manifavas
2014 C conf
WISTP
Charalampos Manifavas, Konstantinos Fysarakis, Konstantinos Rantos, Konstantinos Kagiambakis, Ioannis Papaefstathiou
2014 C conf
ETFA
Konstantinos Fysarakis, Ioannis Papaefstathiou, Charalampos Manifavas, Konstantinos Rantos, Othonas Sultatos
2014 J jnl
IEEE Des. Test
Grigorios Chrysos, Euripides Sotiriades, Christos Rousopoulos, K. Pramataris, Ioannis Papaefstathiou, Apostolos Dollas, Agathoklis Papadopoulos, Ioannis Kirmitzoglou, Vasilis J. Promponas, Theo Theocharides, George Petihakis, Jacques Lagnel
2013 conf
ISSPIT
Konstantinos Fysarakis, Charalampos Manifavas, Ioannis Papaefstathiou, Anastasios Adamopoulos
2013 conf
AFRICON
Grigoris Raptis, Ioannis Papaefstathiou, Konstantinos Georgopoulos, Charalampos Manifavas
2013 J jnl
ACM Trans. Embed. Comput. Syst.
Antonis Nikitakis, Savvas Papaioannou, Ioannis Papaefstathiou
2013 J jnl
Wirel. Networks
Panagiotis Karkazis, Panagiotis Trakadas, Helen-Catherine Leligou, Lambros Sarakis, Ioannis Papaefstathiou, Theodore B. Zahariadis
2013 B conf
FPL
Panagiotis Papantonakis, Dionisios N. Pnevmatikatos, Ioannis Papaefstathiou, Charalampos Manifavas
2013 J jnl
ACM Trans. Archit. Code Optim.
Grigorios Chrysos, Panagiotis Dagritzikos, Ioannis Papaefstathiou, Apostolos Dollas
2013 J jnl
Microprocess. Microsystems
Luciano Lavagno, Mihai T. Lazarescu, Ioannis Papaefstathiou, Andreas Brokalakis, Johan Walters, Bart Kienhuis, Florian Schäfer
2013 conf
AFRICON
Dimitris Tsiamasiotis, Ioannis Papaefstathiou, Charalampos Manifavas
2013 conf
Wireless Days
Konstantinos Rantos, Alexandros Papanikolaou, Charalampos Manifavas, Ioannis Papaefstathiou
2013 C conf
AICCSA
Teodor Tzanoudakis, Ioannis Papaefstathiou, Charalampos Manifavas
2013 J jnl
ACM Trans. Archit. Code Optim.
Pavlos M. Mattheakis, Ioannis Papaefstathiou
2012 conf
ESTIMedia
Antonis Nikitakis, Savvas Papaioannou, Ioannis Papaefstathiou
2012 A conf
DATE
Georgios Chatziparaskevas, Andreas Brokalakis, Ioannis Papaefstathiou
2012 B conf
FPL
Maria Kalenderi, Dionisios N. Pnevmatikatos, Ioannis Papaefstathiou, Charalampos Manifavas
2012 C conf
DSD
Iakovos Mavroidis, Ioannis Mavroidis, Ioannis Papaefstathiou, Luciano Lavagno, Mihai T. Lazarescu, Eduardo de la Torre, Florian Schäfer
2012 C conf
DSD
Dionisios N. Pnevmatikatos, Tobias Becker, Andreas Brokalakis, Karel Bruneel, Georgi Gaydadjiev, Wayne Luk, Kyprianos Papadimitriou, Ioannis Papaefstathiou, Oliver Pell, Christian Pilato, M. Robart, Marco D. Santambrogio, Donatella Sciuto, Dirk Stroobandt, Tim Todman
2012 B conf
WCNC
Georgios-Grigorios Mplemenos, Ioannis Papaefstathiou
2012 C conf
DSD
Luciano Lavagno, Mihai T. Lazarescu, Ioannis Papaefstathiou, Andreas Brokalakis, Johan Walters, Bart Kienhuis, Florian Schäfer
2012 conf
Panhellenic Conference on Informatics
Ioannis Papaefstathiou, Euripides Sotiriades, Stratos Apostolakis, Apostolos Dollas, Pantelis N. Karamolegkos, Marios Logaras, Ioannis Chatzigiannakis, Leonidas Vasilikiotis, Maria Emmanouilidou, Stavros Aggelidakis, Petros Hatzidakis
2012 B conf
WCNC
Andreas Brokalakis, Ioannis Papaefstathiou
2011 Misc conf
FCCM
Matina Lakka, Grigorios Chrysos, Ioannis Papaefstathiou, Apostolos Dollas
2011 conf
FPT
Dimitrios Meidanis, Konstantinos Georgopoulos, Ioannis Papaefstathiou
2011 B conf
FPL
Grigorios Chrysos, Panagiotis Dagritzikos, Ioannis Papaefstathiou, Apostolos Dollas
2011 A conf
DATE
Nafsika Chrysanthou, Grigorios Chrysos, Euripides Sotiriades, Ioannis Papaefstathiou
2011 conf
ICC
Andreas Brokalakis, Georgios-Grigorios Mplemenos, Konstantinos Papadopoulos, Ioannis Papaefstathiou
2011 conf
BIOINFORMATICS
Matina Lakka, A. Desarti, Grigorios Chrysos, Euripides Sotiriades, Ioannis Papaefstathiou, Apostolos Dollas
2010 J jnl
IEEE Trans. Instrum. Meas.
Diomidis I. Katzourakis, Ioannis Papaefstathiou, Michail G. Lagoudakis
2010 conf
WISES
Constantinos Stefanatos, Ioannis Papaefstathiou, Charalampos Manifavas
2010 Misc conf
FCCM
Dimitris Bouris, Antonis Nikitakis, Ioannis Papaefstathiou
2010 B conf
FPL
Kostas Theocharoulis, Ioannis Papaefstathiou, Charalampos Manifavas
2010 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Konstantinos Papadopoulos, Ioannis Papaefstathiou
2010 B conf
GLOBECOM
Georgios-Grigorios Mplemenos, Konstantinos Papadopoulos, Ioannis Papaefstathiou
2009 B conf
FPL
Grigorios Chrysos, Euripides Sotiriades, Ioannis Papaefstathiou, Apostolos Dollas
2009 B conf
FPL
Joannis Sotiropoulos, Ioannis Papaefstathiou
2009 B conf
FPL
Charalampos Effraimidis, Kyprianos Papadimitriou, Apostolos Dollas, Ioannis Papaefstathiou
2009 J jnl
IEEE Des. Test Comput.
Iakovos Mavroidis, Ioannis Mavroidis, Ioannis Papaefstathiou
2009 C conf
IEEE International Workshop on Rapid System Prototyping
Michalis Platsis, Ioannis Papaefstathiou, Dimitrios Meintanis
2009 A conf
DATE
Panagiotis Afratis, Constantinos Galanakis, Euripides Sotiriades, Georgios-Grigorios Mplemenos, Grigorios Chrysos, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos
2009 B conf
FPL
Dimitrios Kontos, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos
2009 conf
ADHOC-NOW
Grigorios Chrysos, Ioannis Papaefstathiou
2009 Misc conf
FCCM
Kostas Theocharoulis, Charalampos Manifavas, Ioannis Papaefstathiou
2009 conf
ICSAMOS
Michalis Vavouras, Kyprianos Papadimitriou, Ioannis Papaefstathiou
2009 A conf
FPGA
Michalis Vavouras, Kyprianos Papadimitriou, Ioannis Papaefstathiou
2009 conf
CCNC
Dimitrios Meintanis, Ioannis Papaefstathiou
2009 conf
Future Internet Assembly
Theodore B. Zahariadis, Panagiotis Trakadas, Helen-Catherine Leligou, Kostas Papadopoylos, Evangelos Ladis, Christos Tselikis, Charalampos Vangelatos, Lionel Besson, Jukka Manner, Michael I. Loupis, Federico Alvarez, Ioannis Papaefstathiou
2008 Misc conf
FCCM
Antonis Nikitakis, Ioannis Papaefstathiou
2008 conf
ICC
Antonis Nikitakis, Ioannis Papaefstathiou
2008 conf
FPT
Iakovos Mavroidis, Ioannis Papaefstathiou
2008 J jnl
IEEE Des. Test Comput.
Dimitrios Simos, Ioannis Papaefstathiou, Manolis Katevenis
2008 Misc conf
FCCM
Georgios-Grigorios Mplemenos, Ioannis Papaefstathiou
2008 conf
ReConFig
Dimitrios Meintanis, Ioannis Papaefstathiou
2008 Misc conf
FCCM
Konstantinos Papadopoulos, Ioannis Papaefstathiou
2007 Misc conf
FCCM
Ioannis Mavroidis, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos
2007 conf
ICSAMOS
Vassilis Dimopoulos, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos
2007 conf
ACM Great Lakes Symposium on VLSI
Ioannis Papaefstathiou, George Kornaros, Nikolaos Chrysos
2007 C conf
ISCC
Theofanis Orphanoudakis, George Kornaros, Ioannis Mavroidis, Aristides Nikologiannis, Ioannis Papaefstathiou
2007 conf
FPT
Dimitrios Meintanis, Ioannis Papaefstathiou
2007 J jnl
Microprocess. Microsystems
Kyriakos Vlachos, Theofanis Orphanoudakis, Ioannis Papaefstathiou, Nikos A. Nikolaou, Dionisios N. Pnevmatikatos, George E. Konstantoulakis, Jorge-A. Sanchez-Papaspiliou
2007 A conf
DATE
Ioannis Mavroidis, Ioannis Papaefstathiou
2007 C conf
IEEE International Workshop on Rapid System Prototyping
Ioannis Mavroidis, Ioannis Papaefstathiou, Dionisios N. Pnevmatikatos
2007 A* conf
INFOCOM
Ioannis Papaefstathiou, Vassilis Papaefstathiou
2007 J jnl
CoRR
Ioannis Papaefstathiou, Theofanis Orphanoudakis, George Kornaros, Christopher Kachris, Ioannis Mavroidis, Aristides Nikologiannis
2006 conf
DATE Designers' Forum
Vassilis Papaefstathiou, Ioannis Papaefstathiou
2006 conf
ICC
Ioannis Papaefstathiou, Vassilis Papaefstathiou
2005 conf
ASAP
Aristides Efthymiou, Jim D. Garside, Ioannis Papaefstathiou
2005 B conf
LCN
Vassilis Papaefstathiou, Ioannis Papaefstathiou
2005 A conf
DATE
Ioannis Papaefstathiou, Theofanis Orphanoudakis, George Kornaros, Christopher Kachris, Ioannis Mavroidis, Aristides Nikologiannis
2004 J jnl
Microprocess. Microsystems
Aristides Nikologiannis, Ioannis Papaefstathiou, George Kornaros, Christopher Kachris
2004 J jnl
Microprocess. Microsystems
Ioannis Papaefstathiou, Vassilis Papaefstathiou, Christos P. Sotiriou
2004 J jnl
IEEE Micro
Ioannis Papaefstathiou, Nikos A. Nikolaou, Bharat T. Doshi, Eric Grosse
2004 J jnl
J. Circuits Syst. Comput.
Ioannis Papaefstathiou
2004 J jnl
IEEE Micro
Ioannis Papaefstathiou, Stylianos Perissakis, Theofanis Orphanoudakis, Nikos A. Nikolaou, George Kornaros, Nicholas Zervos, George E. Konstantoulakis, Dionisios N. Pnevmatikatos, Kyriakos Vlachos
2004 J jnl
IEEE Commun. Lett.
Ioannis Papaefstathiou, Kyriakos Vlachos, Nikos A. Nikolaou, Nicholas Zervos, Victor B. Lawrence
2004 A conf
DATE
Ioannis Papaefstathiou, George Kornaros, Nicholaos Zervos
2004 J jnl
IEEE Des. Test Comput.
Ioannis Papaefstathiou
2004 conf
ICC
Manolis Katevenis, Giorgos Passas, Dimitrios Simos, Ioannis Papaefstathiou, Nikolaos Chrysos
2003 A* conf
DAC
George Kornaros, Ioannis Papaefstathiou, Aristides Nikologiannis, Nicholaos Zervos
2003 conf
ISCAS (2)
George Kornaros, Theofanis Orphanoudakis, Ioannis Papaefstathiou
2003 conf
HSNMC
George Kornaros, Ioannis Papaefstathiou
2003 conf
ISCAS (2)
Ioannis Papaefstathiou, Helen-Catherine Leligou, Theofanis Orphanoudakis, George Kornaros, Nicholaos Zervos, George E. Konstantoulakis
2003 conf
ICECS
Christos P. Sotiriou, Ioannis Papaefstathiou
2003 conf
ASAP
George Kornaros, Theofanis Orphanoudakis, Ioannis Papaefstathiou
2003 conf
ICECS
Ioannis Papaefstathiou, George Kornaros
2003 conf
ISVLSI
Ioannis Papaefstathiou
2002 Misc conf
WCAE
Ioannis Papaefstathiou, Christos P. Sotiriou
2001 conf
ICECS
Ioannis Papaefstathiou
2001
Ioannis Papaefstathiou
2000 conf
IS&N
Ioannis Papaefstathiou
1999 C conf
IPCCC
Ioannis Papaefstathiou
1999 conf
ICECS
Ioannis Papaefstathiou, A. Brown, J. Simer, D. Sobel, J. Sutaria, S. Y. Wang, T. Blackwell, M. Smith, W. Yang
1999 B conf
Data Compression Conference
Ioannis Papaefstathiou
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 == {}