Maarten van Steen

224 papers A* 11A 20B 21C 17Misc 4Journal 74Unranked 66
YearRankTypeTitle / Venue / Authors
2025 C ed.
CLOSER
Valeria Cardellini, Maarten van Steen
2025 A* conf
USENIX Security Symposium
Marvin Büchel, Tommaso Paladini, Stefano Longari, Michele Carminati, Stefano Zanero, Hodaya Binyamini, Gal Engelberg, Dan Klein, Giancarlo Guizzardi, Marco Caselli, Andrea Continella, Maarten van Steen, Andreas Peter, Thijs van Ede
2025 conf
ARES (1)
Fatemeh Marzani, Thijs van Ede, Geert Heijenk, Maarten van Steen
2024 C ed.
CLOSER
Maarten van Steen, Claus Pahl
2024 C conf
ICISSP
Philipp Jakubeit, Andreas Peter, Maarten van Steen
2024 C conf
WISTP
Philipp Jakubeit, Andreas Peter, Maarten van Steen
2024 J jnl
Comput. Environ. Urban Syst.
Nadia Shafaeipour, Valeriu-Daniel Stanciu, Maarten van Steen, Mingshu Wang
2023 conf
GIScience
Nadia Shafaeipour, Maarten van Steen, Frank O. Ostermann
2023 C conf
ISPEC
Philipp Jakubeit, Andreas Peter, Maarten van Steen
2023 B conf
IFIP Networking
Fatemeh Marzani, Fatemeh Ghassemi, Zeynab Sabahi-Kaviani, Thijs van Ede, Maarten van Steen
2023 J jnl
Comput. Commun.
Valeriu-Daniel Stanciu, Maarten van Steen, Ciprian Dobre, Andreas Peter
2023 C ed.
CLOSER
Maarten van Steen, Claus Pahl
2022 A conf
MSWiM
Valeriu-Daniel Stanciu, Maarten van Steen, Ciprian Dobre, Andreas Peter
2022 C conf
DAIS
Maarten van Steen, Valeriu-Daniel Stanciu, Nadia Shafaeipour, Cristian Chilipirea, Ciprian Dobre, Andreas Peter, Mingshu Wang
2022 A* conf
SP
Thijs van Ede, Hojjat Aghakhani, Noah Spahn, Riccardo Bortolameotti, Marco Cova, Andrea Continella, Maarten van Steen, Andreas Peter, Christopher Kruegel, Giovanni Vigna
2022 C ed.
CLOSER
Maarten van Steen, Donald Ferguson, Claus Pahl
2022 conf
ETAA
Philipp Jakubeit, Andreas Peter, Maarten van Steen
2021 C conf
CLOSER
Maarten van Steen
2021 conf
EdgeSys@EuroSys
Valeriu-Daniel Stanciu, Maarten van Steen, Ciprian Dobre, Andreas Peter
2021 J jnl
CoRR
Maarten van Steen, Andrew A. Chien, Patrick Eugster
2020 ed.
WWW (Companion Volume)
Amal El Fallah Seghrouchni, Gita Sukthankar, Tie-Yan Liu, Maarten van Steen
2020 A* conf
NDSS
Thijs van Ede, Riccardo Bortolameotti, Andrea Continella, Jingjing Ren, Daniel J. Dubois, Martina Lindorfer, David R. Choffnes, Maarten van Steen, Andreas Peter
2020 J jnl
IEEE Trans. Knowl. Data Eng.
Stijn Heldens, Nelly Litvak, Maarten van Steen
2020 A* ed.
WWW
Yennun Huang, Irwin King, Tie-Yan Liu, Maarten van Steen
2020 C conf
MobiQuitous
Valeriu-Daniel Stanciu, Maarten van Steen, Ciprian Dobre, Andreas Peter
2019 J jnl
IEEE Internet Comput.
Maarten van Steen, Barry Leiba
2018 J jnl
ACM Comput. Surv.
Adriana Draghici, Maarten van Steen
2018 B conf
MDM
Cristian Chilipirea, Ciprian Dobre, Mitra Baratchi, Maarten van Steen
2018 J jnl
Sensors
Cristian Chilipirea, Mitra Baratchi, Ciprian Dobre, Maarten van Steen
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Maarten van Steen
2017 J jnl
CoRR
Stijn Heldens, Claudio Martella, Nelly Litvak, Maarten van Steen
2017 J jnl
IEEE Commun. Mag.
Claudio Martella, Marco Cattani, Maarten van Steen
2017 conf
SocInfo (2)
Tristan Brugman, Mitra Baratchi, Geert Heijenk, Maarten van Steen
2017 J jnl
CoRR
Mitra Baratchi, Geert Heijenk, Maarten van Steen
2017 J jnl
Pervasive Mob. Comput.
Claudio Martella, Armando Miraglia, Jeana Frost, Marco Cattani, Maarten van Steen
2016 J jnl
Computing
Maarten van Steen, Andrew S. Tanenbaum
2016 J jnl
ACM Trans. Sens. Networks
Spyros Voulgaris, Matthew Dobson, Maarten van Steen
2016 conf
HPCS
Paulo Moura, Fabio Kon, Spyros Voulgaris, Maarten van Steen
2016 A* conf
PerCom
Claudio Martella, Armando Miraglia, Marco Cattani, Maarten van Steen
2016 B conf
MDM
Cristian Chilipirea, Andreea-Cristina Petre, Ciprian Dobre, Maarten van Steen
2016 conf
UbiComp Adjunct
Mitra Baratchi, Lennart Teunissen, Peter Ebben, Wouter B. Teeuw, Jan Laarhuis, Maarten van Steen
2015 conf
3PGCIC
Cristian Chilipirea, Andreea-Cristina Petre, Ciprian Dobre, Maarten van Steen
2015 J jnl
IEEE Trans. Knowl. Data Eng.
Hoda Mashayekhi, Jafar Habibi, Tania Khalafbeigi, Spyros Voulgaris, Maarten van Steen
2015 conf
3PGCIC
Cristian Chilipirea, Andreea-Cristina Petre, Ciprian Dobre, Maarten van Steen
2015 conf
ARMS-CC@PODC
Paulo Moura, Fabio Kon, Spyros Voulgaris, Maarten van Steen
2014 A conf
ICDCS
Vinay Setty, Roman Vitenberg, Gunnar Kreitz, Guido Urdaneta, Maarten van Steen
2014 J jnl
IEEE Commun. Mag.
Claudio Martella, Maarten van Steen, Aart van Halteren, Claudine Conrado, Jie Li
2014 J jnl
J. Internet Serv. Appl.
Anna Chmielowiec, Spyros Voulgaris, Maarten van Steen
2014 J jnl
Ad Hoc Networks
Maarten van Steen, Prasant Mohapatra, P. Venkat Rangan
2014 A* conf
PerCom
Claudio Martella, Matthew Dobson, Aart van Halteren, Maarten van Steen
2014 A* conf
INFOCOM
Vinay Setty, Gunnar Kreitz, Guido Urdaneta, Roman Vitenberg, Maarten van Steen
2013 J jnl
Computing
Hoda Mashayekhi, Jafar Habibi, Spyros Voulgaris, Maarten van Steen
2013 B ed.
OPODIS
Roberto Baldoni, Nicolas Nisse, Maarten van Steen
2013 J jnl
Int. J. Sens. Networks
Suhail Yousaf, Rena Bakhshi, Maarten van Steen
2013 conf
DEBS
Vinay Setty, Gunnar Kreitz, Roman Vitenberg, Maarten van Steen, Guido Urdaneta, Staffan Gimåker
2013 A conf
Middleware
Spyros Voulgaris, Maarten van Steen
2012 J jnl
ACM Trans. Sens. Networks
Konrad Iwanicki, Maarten van Steen
2012 J jnl
J. Internet Serv. Appl.
Maarten van Steen, Guillaume Pierre, Spyros Voulgaris
2012 J jnl
CoRR
Suhail Yousaf, Rena Bakhshi, Maarten van Steen, Spyros Voulgaris, John L. Kelley
2012 J jnl
Computing
Alberto Montresor, Guszti Eiben, Maarten van Steen
2012 conf
SNS
Abhishek Singh, Guido Urdaneta, Maarten van Steen, Roman Vitenberg
2012 A conf
Middleware
Vinay Setty, Maarten van Steen, Roman Vitenberg, Spyros Voulgaris
2012 A* conf
IEEE Symposium on Security and Privacy
Christian Rossow, Christian J. Dietrich, Chris Grier, Christian Kreibich, Vern Paxson, Norbert Pohlmann, Herbert Bos, Maarten van Steen
2012 B conf
ICCCN
Suhail Yousaf, Rena Bakhshi, Maarten van Steen
2012 B conf
ICCCN
Albana Gaba, Spyros Voulgaris, Konrad Iwanicki, Maarten van Steen
2012 A conf
ICDCS
Abhishek Singh, Guido Urdaneta, Maarten van Steen, Roman Vitenberg
2012 conf
SocInfo
Julie M. Birkholz, Rena Bakhshi, Ravindra Harige, Maarten van Steen, Peter Groenewegen
2012 J jnl
CoRR
Julie M. Birkholz, Rena Bakhshi, Ravindra Harige, Maarten van Steen, Peter Groenewegen
2011 J jnl
CoRR
Rena Bakhshi, Daniela Gavidia, Wan J. Fokkink, Maarten van Steen
2011 conf
QEST
Rena Bakhshi, Daniela Gavidia, Wan J. Fokkink, Maarten van Steen
2011 J jnl
ACM Comput. Surv.
Guido Urdaneta, Guillaume Pierre, Maarten van Steen
2011 J jnl
IEEE Internet Comput.
Maarten van Steen
2011 C conf
DAIS
Aaron Harwood, Spyros Voulgaris, Maarten van Steen
2011 conf
ACWR
Maarten van Steen
2011 A conf
DSN
Matthew Dobson, Spyros Voulgaris, Maarten van Steen
2011 conf
EC2ND
Christian J. Dietrich, Christian Rossow, Felix C. Freiling, Herbert Bos, Maarten van Steen, Norbert Pohlmann
2011 ed.
ACWR
Rajagopala Chidambaram, P. Venkat Rangan, Satish K. Tripathi, Prasant Mohapatra, Maneesha V. Ramesh, Maarten van Steen
2011 conf
BADGERS@EuroSys
Christian Rossow, Christian J. Dietrich, Herbert Bos, Lorenzo Cavallaro, Maarten van Steen, Felix C. Freiling, Norbert Pohlmann
2010 J jnl
Comput. Networks
Guido Urdaneta, Guillaume Pierre, Maarten van Steen
2010 B conf
NOSSDAV
Kévin Huguenin, Anne-Marie Kermarrec, Vivek Rai, Maarten van Steen
2010 J jnl
Genet. Program. Evolvable Mach.
Juan Luis Jiménez Laredo, A. E. Eiben, Maarten van Steen, Juan Julián Merelo Guervós
2010 J jnl
IEEE Trans. Parallel Distributed Syst.
Konrad Iwanicki, Maarten van Steen
2010 conf
SASO
Anna Chmielowiec, Maarten van Steen
2010 J jnl
Sci. Comput. Program.
Giovanni Russello, Changyu Dong, Naranker Dulay, Michel R. V. Chaudron, Maarten van Steen
2010 conf
Replication
Maarten van Steen, Guillaume Pierre
2010 J jnl
Comput. Networks
Gian Paolo Jesi, Alberto Montresor, Maarten van Steen
2010 conf
FOCLASA
Jan-Mark S. Wams, Maarten van Steen
2010 J jnl
IEEE Trans. Computers
Pawel Garbacki, Dick H. J. Epema, Maarten van Steen
2009 Misc conf
ICDCN
Rena Bakhshi, Daniela Gavidia, Wan J. Fokkink, Maarten van Steen
2009 J jnl
Comput. Networks
Rena Bakhshi, Daniela Gavidia, Wan J. Fokkink, Maarten van Steen
2009 A conf
ICDCS
Paolo Costa, Jeff Napper, Guillaume Pierre, Maarten van Steen
2009 conf
CIKM-CNIKM
Arno Bakker, Elth Ogston, Maarten van Steen
2009 J jnl
Comput. Networks
Anne-Marie Kermarrec, Maarten van Steen
2009 conf
e-Democracy
Albana Gaba, Spyros Voulgaris, Maarten van Steen
2009 B conf
EWSN
Konrad Iwanicki, Maarten van Steen
2009 conf
IPSN
Konrad Iwanicki, Maarten van Steen
2009 Misc conf
SAC
Gian Paolo Jesi, Edoardo Mollona, Srijith K. Nair, Maarten van Steen
2009 conf
ICC
Konrad Iwanicki, Maarten van Steen
2009 ch.
Encyclopedia of Database Systems
Maarten van Steen
2009 J jnl
Comput. Networks
Guido Urdaneta, Guillaume Pierre, Maarten van Steen
2008 B conf
MASS
Daniela Gavidia, Maarten van Steen
2008 J jnl
CoRR
Rena Bakhshi, Daniela Gavidia, Wan J. Fokkink, Maarten van Steen
2008 J jnl
Comput. Networks
Pawel Garbacki, Dick H. J. Epema, Maarten van Steen
2008 C conf
COORDINATION
Giovanni Russello, Changyu Dong, Naranker Dulay, Michel R. V. Chaudron, Maarten van Steen
2008 conf
CSTST
Giovanni Russello, Naranker Dulay, Michel R. V. Chaudron, Maarten van Steen
2008 conf
IPTPS
Pawel Garbacki, Dick H. J. Epema, Johan A. Pouwelse, Maarten van Steen
2008 A conf
PPSN
Juan Luis Jiménez Laredo, Ágoston E. Eiben, Maarten van Steen, Juan Julián Merelo Guervós
2008 conf
Euro-Par
Juan Luis Jiménez Laredo, A. E. Eiben, Maarten van Steen, Pedro A. Castillo, Antonio Miguel Mora, Juan Julián Merelo Guervós
2008 J jnl
Comput. Networks
Michal Szymaniak, David L. Presotto, Guillaume Pierre, Maarten van Steen
2008 J jnl
SIGMETRICS Perform. Evaluation Rev.
Boudewijn R. Haverkort, Markus Siegle, Maarten van Steen
2008 A* conf
WWW
Zhou Wei, Dejun Jiang, Guillaume Pierre, Chi-Hung Chi, Maarten van Steen
2008 J jnl
Concurr. Comput. Pract. Exp.
Johan A. Pouwelse, Pawel Garbacki, Jun Wang, Arno Bakker, Jie Yang, Alexandru Iosup, Dick H. J. Epema, Marcel J. T. Reinders, Maarten van Steen, Henk J. Sips
2008 conf
MW4SOC
Anna Chmielowiec, Guillaume Pierre, Jaap Gordijn, Maarten van Steen
2008 J jnl
Stud. Inform. Univ.
Spyros Voulgaris, Maarten van Steen, Aline Baggio, Gerco Ballintijn
2008 conf
MMB
Maarten van Steen
2008 book
Andrew S. Tanenbaum, Maarten van Steen
2007 conf
WEBIST (1)
Guido Urdaneta, Guillaume Pierre, Maarten van Steen
2007 A conf
ICDCS
Vivek Rai, Swaminathan Sivasubramanian, Sandjai Bhulai, Pawel Garbacki, Maarten van Steen
2007 conf
SASO
Pawel Garbacki, Dick H. J. Epema, Maarten van Steen
2007 J jnl
Sci. Comput. Program.
Giovanni Russello, Michel R. V. Chaudron, Maarten van Steen, Ibrahim Bokharouss
2007 J jnl
IEEE Internet Comput.
Swaminathan Sivasubramanian, Guillaume Pierre, Maarten van Steen, Gustavo Alonso
2007 book
Distributed systems - principles and paradigms, 2nd Edition.
Andrew S. Tanenbaum, Maarten van Steen
2007 J jnl
Concurr. Comput. Pract. Exp.
Michal Szymaniak, Guillaume Pierre, Mariana Simons-Nikolova, Maarten van Steen
2007 B conf
MDM
Daniela Gavidia, Maarten van Steen
2007 J jnl
ACM Trans. Comput. Syst.
Márk Jelasity, Spyros Voulgaris, Rachid Guerraoui, Anne-Marie Kermarrec, Maarten van Steen
2007 J jnl
ACM SIGOPS Oper. Syst. Rev.
Anne-Marie Kermarrec, Maarten van Steen
2007 A conf
Middleware
Spyros Voulgaris, Maarten van Steen
2007 conf
SASO
Gian Paolo Jesi, David Hales, Maarten van Steen
2007 A conf
ITC
Sandjai Bhulai, Swaminathan Sivasubramanian, Robert D. van der Mei, Maarten van Steen
2007 A conf
ICDCS
Pawel Garbacki, Dick H. J. Epema, Maarten van Steen
2007 B conf
ICNP
Konrad Iwanicki, Maarten van Steen
2007 A conf
GECCO
W. R. M. U. K. Wickramasinghe, Maarten van Steen, A. E. Eiben
2007 J jnl
Concurr. Comput. Pract. Exp.
Spyros Voulgaris, Maarten van Steen, Konrad Iwanicki
2007 conf
OTM Workshops (2)
Konrad Iwanicki, Maarten van Steen
2006 conf
Peer-to-Peer Computing
Pawel Garbacki, Alexandru Iosup, Dick H. J. Epema, Maarten van Steen
2006 conf
MIE
Wim Stut, Frank Wartena, Maarten van Steen
2006 J jnl
ACM Trans. Internet Techn.
Arno Bakker, Maarten van Steen, Andrew S. Tanenbaum
2006 J jnl
IEEE Commun. Mag.
Guillaume Pierre, Maarten van Steen
2006 conf
SelfMan
Konrad Iwanicki, Maarten van Steen, Spyros Voulgaris
2006 J jnl
ACM SIGOPS Oper. Syst. Rev.
Özalp Babaoglu, Márk Jelasity, Anne-Marie Kermarrec, Alberto Montresor, Maarten van Steen
2006 A ed.
Middleware
Maarten van Steen, Michi Henning
2006 C conf
DAIS
Elth Ogston, Arno Bakker, Maarten van Steen
2006 conf
IPTPS
Spyros Voulgaris, Etienne Rivière, Anne-Marie Kermarrec, Maarten van Steen
2006 conf
IPTPS
Johan A. Pouwelse, Pawel Garbacki, Jun Wang, Arno Bakker, Jie Yang, Alexandru Iosup, Dick H. J. Epema, Marcel J. T. Reinders, Maarten van Steen, Henk J. Sips
2006 conf
AAA-IDEA
Michal Szymaniak, Guillaume Pierre, Maarten van Steen
2005 conf
AAA-IDEA
Swaminathan Sivasubramanian, Guillaume Pierre, Maarten van Steen
2005 J jnl
J. Netw. Syst. Manag.
Spyros Voulgaris, Daniela Gavidia, Maarten van Steen
2005 J jnl
Comput. Networks
Aline Baggio, Maarten van Steen
2005 C conf
COORDINATION
Giovanni Russello, Michel R. V. Chaudron, Maarten van Steen
2005 conf
Euro-Par
Spyros Voulgaris, Maarten van Steen
2005 ch.
Information Modeling Methods and Methodologies
Nicky Boertien, Maarten van Steen, Henk Jonkers
2005 A* conf
WWW
Swaminathan Sivasubramanian, Gustavo Alonso, Guillaume Pierre, Maarten van Steen
2005 conf
SAINT
Michal Szymaniak, Guillaume Pierre, Maarten van Steen
2005 A conf
IPDPS
Bogdan C. Popescu, Maarten van Steen, Bruno Crispo, Andrew S. Tanenbaum, Jan Sacha, Ihor Kuz
2005 ed.
Self-star Properties in Complex Information Systems
Özalp Babaoglu, Márk Jelasity, Alberto Montresor, Christof Fetzer, Stefano Leonardi, Aad P. A. van Moorsel, Maarten van Steen
2004 C conf
PDP
Márk Jelasity, Wojtek Kowalczyk, Maarten van Steen
2004 conf
CoopIS/DOA/ODBASE (2)
Giovanni Russello, Michel R. V. Chaudron, Maarten van Steen
2004 conf
Euro-Par
Giovanni Russello, Michel R. V. Chaudron, Maarten van Steen
2004 conf
FTDCS
Spyros Voulgaris, Anne-Marie Kermarrec, Laurent Massoulié, Maarten van Steen
2004 J jnl
Appl. Artif. Intell.
Elth Ogston, Maarten van Steen, Frances M. T. Brazier
2004 ch.
The Practical Handbook of Internet Computing
Jan-Mark S. Wams, Maarten van Steen
2004 J jnl
Proc. IEEE
Ton Kalker, Dick H. J. Epema, Pieter H. Hartel, Reginald L. Lagendijk, Maarten van Steen
2004 J jnl
IEEE Distributed Syst. Online
Maarten van Steen
2004 conf
IEEE SCC
Swaminathan Sivasubramanian, Guillaume Pierre, Maarten van Steen
2004 J jnl
ACM Comput. Surv.
Swaminathan Sivasubramanian, Michal Szymaniak, Guillaume Pierre, Maarten van Steen
2004 B conf
ICPADS
Michal Szymaniak, Guillaume Pierre, Maarten van Steen
2004 conf
ACM SIGOPS European Workshop
Swaminathan Sivasubramanian, Guillaume Pierre, Maarten van Steen
2004 A conf
Middleware
Márk Jelasity, Rachid Guerraoui, Anne-Marie Kermarrec, Maarten van Steen
2004 J jnl
Stud. Inform. Univ.
Spyros Voulgaris, Maarten van Steen, Aline Baggio, Gerco Ballintijn
2004 J jnl
IEEE Internet Comput.
Jan-Mark S. Wams, Maarten van Steen
2004 ed.
WCW
Chi-Hung Chi, Maarten van Steen, Craig E. Wills
2003 conf
WCW
Swaminathan Sivasubramanian, Guillaume Pierre, Maarten van Steen
2003 C conf
DAIS
Jan-Mark S. Wams, Maarten van Steen
2003 conf
AP2PC
Spyros Voulgaris, Márk Jelasity, Maarten van Steen
2003 A conf
AAMAS
Elth Ogston, Benno J. Overeinder, Maarten van Steen, Frances M. T. Brazier
2003 conf
DSOM
Spyros Voulgaris, Maarten van Steen
2003 Misc conf
PDPTA
Giovanni Russello, Michel R. V. Chaudron, Maarten van Steen
2003 conf
OTM
Bernd J. Krämer, Maarten van Steen, Steve Vinoski
2003 conf
AP2PC
Elth Ogston, Benno J. Overeinder, Maarten van Steen, Frances M. T. Brazier
2003 conf
ICWI
Michal Szymaniak, Guillaume Pierre, Maarten van Steen
2003 A* conf
PerCom
Jan-Mark S. Wams, Maarten van Steen
2003 B conf
OPODIS
Maarten van Steen
2003 B conf
NCA
Aline Baggio, Maarten van Steen
2003 book
Andrew S. Tanenbaum, Maarten van Steen
2002 A conf
ACSAC
Bogdan C. Popescu, Maarten van Steen, Andrew S. Tanenbaum
2002 B conf
COMPSAC
Maarten van Steen, Gerco Ballintijn
2002 Misc conf
SAC
Frances M. T. Brazier, Benno J. Overeinder, Maarten van Steen, Niek J. E. Wijngaards
2002 J jnl
IEEE Trans. Computers
Guillaume Pierre, Maarten van Steen, Andrew S. Tanenbaum
2002 B conf
CCGRID
Márk Jelasity, Mike Preuß, Maarten van Steen, Ben Paechter
2002 J jnl
Data Knowl. Eng.
Niek J. E. Wijngaards, Benno J. Overeinder, Maarten van Steen, Frances M. T. Brazier
2002 J jnl
Comput. Commun.
Ihor Kuz, Maarten van Steen, Henk J. Sips
2002 B conf
OPODIS
Spyros Voulgaris, Maarten van Steen, Aline Baggio, Gerco Ballintijn
2002 B conf
SRDS
Özalp Babaoglu, Anne-Marie Kermarrec, Robbert van Renesse, Luís E. T. Rodrigues, Maarten van Steen, Amin Vadhat
2001 B conf
NCA
Arno Bakker, Maarten van Steen, Andrew S. Tanenbaum
2001 J jnl
IEEE Distributed Syst. Online
Maarten van Steen
2001 J jnl
Comput. Commun.
Guillaume Pierre, Ihor Kuz, Maarten van Steen, Andrew S. Tanenbaum
2001 conf
Multi-Agent-Systems and Applications
Frances M. T. Brazier, Maarten van Steen, Niek J. E. Wijngaards
2001 J jnl
Comput. J.
Aline Baggio, Gerco Ballintijn, Maarten van Steen, Andrew S. Tanenbaum
2001 J jnl
Inf. Softw. Technol.
M. Jansen, E. Klaver, Patrick Verkaik, Maarten van Steen, Andrew S. Tanenbaum
2001 conf
PROMS
Guillaume Pierre, Maarten van Steen
2001 A conf
HotOS
Guido van 't Noordende, Frances M. T. Brazier, Andrew S. Tanenbaum, Maarten van Steen
2001 J jnl
IEEE Internet Comput.
Gerco Ballintijn, Maarten van Steen, Andrew S. Tanenbaum
2000 conf
DOA
Ihor Kuz, Patrick Verkaik, Maarten van Steen, Henk J. Sips
2000 J jnl
ACM SIGOPS Oper. Syst. Rev.
Gerco Ballintijn, Maarten van Steen
2000 conf
ACM SIGOPS European Workshop
Aline Baggio, Gerco Ballintijn, Maarten van Steen
2000 J jnl
IEEE Distributed Syst. Online
Maarten van Steen
2000 J jnl
ACM SIGOPS Oper. Syst. Rev.
Henri E. Bal, Raoul Bhoedjang, Rutger F. H. Hofman, Ceriel J. H. Jacobs, Thilo Kielmann, Jason Maassen, Rob van Nieuwpoort, John Romain, Luc Renambot, Tim Rühl, Ronald Veldema, Kees Verstoep, Aline Baggio, Gerco Ballintijn, Ihor Kuz, Guillaume Pierre, Maarten van Steen, Andrew S. Tanenbaum, Gerben Doornbos, Desmond Germans, Hans J. W. Spoelder, Evert Jan Baerends, Stan J. A. van Gisbergen, Hamid Afsermanseh, G. Dick van Albada, Adam Belloum, David Dubbeldam, Zeger W. Hendrikse, Louis O. Hertzberger, Alfons G. Hoekstra, Kamil Iskra, Drona Kandhai, Dennis C. Koelma, Frank van der Linden, Benno J. Overeinder, Peter M. A. Sloot, Piero Spinnato, Dick H. J. Epema, Arjan J. C. van Gemund, Pieter P. Jonker, Andrei Radulescu, Kees van Reeuwijk, Henk J. Sips, Peter M. W. Knijnenburg, Michael S. Lew, Floris Sluiter, Lex Wolters, Hans Blom, Cees de Laat
2000 conf
USENIX ATC, FREENIX Track
Arno Bakker, E. Amade, Gerco Ballintijn, Ihor Kuz, Patrick Verkaik, I. van der Wijk, Maarten van Steen, Andrew S. Tanenbaum
1999 J jnl
Distributed Syst. Eng.
Maarten van Steen, Andrew S. Tanenbaum, Ihor Kuz, Henk J. Sips
1999 conf
FTDCS
Arno Bakker, Maarten van Steen, Andrew S. Tanenbaum
1999 J jnl
IEEE Concurr.
Maarten van Steen, Philip Homburg, Andrew S. Tanenbaum
1998 A conf
ICDCS
Anne-Marie Kermarrec, Ihor Kuz, Maarten van Steen, Andrew S. Tanenbaum
1998 B conf
COMPSAC
Mark Polman, Maarten van Steen, Arie de Bruin
1998 J jnl
Comput. J.
Maarten van Steen, Franz J. Hauck, Gerco Ballintijn, Andrew S. Tanenbaum
1998 J jnl
IEEE Commun. Mag.
Maarten van Steen, Franz J. Hauck, Philip Homburg, Andrew S. Tanenbaum
1998 conf
ACM SIGOPS European Workshop
Arno Bakker, Maarten van Steen, Andrew S. Tanenbaum
1998 B conf
COMPSAC
Maarten van Steen, Stefan Van der Zijden, Henk J. Sips
1997 conf
PDSE
Mark Polman, Maarten van Steen, Arie de Bruin
1996 conf
ACM SIGOPS European Workshop
Philip Homburg, Maarten van Steen, Andrew S. Tanenbaum
1996 conf
HPCN Europe
Mark Polman, Maarten van Steen
1994 conf
EUROSIM
Armand ten Dam, Teus Vogel, Maarten van Steen
1994 conf
EUROSIM
Maarten van Steen, Henk J. Sips, Hai-Xiang Lin
1991 conf
PDIS
Maarten van Steen, Edwin D. de Jong
1986 C conf
IAS
Maarten van Steen, Luuk Groenewegen, Ger Oosting
redb/extractors/decompiler/bninja/analysis/disassembly.py
← Index redb/extractors/decompiler/bninja/analysis/disassembly.py python
import re
import time

import binaryninja
from binaryninja.enums import (
    InstructionTextTokenType,
)

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


class DisassemblyAnalysis:
    INVALID_STACK_SIZE = -1

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

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

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

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

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

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

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

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

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

            return disassembly_json, self.errors

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

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

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

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

                if not mnemonic:
                    continue

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

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

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

        return type_frequencies

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

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

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

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

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

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

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

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

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

            if self.function.mlil is None:
                return 0

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

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

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

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

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

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

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

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

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

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

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