Cesare Pautasso

238 papers A* 6A 20B 39C 8Misc 12Journal 43Unranked 82
YearRankTypeTitle / Venue / Authors
2026 J jnl
Internet Things
Adrian Bazan-Muñoz, Cesare Pautasso, Guadalupe Ortiz, Alfonso García de Prado
2026 B ed.
ECSA
Vasilios Andrikopoulos, Cesare Pautasso, Nour Ali, Jacopo Soldani, Xiwei Xu
2026 ed.
ECSA (Tracks and Workshops)
Domenico Bianculli, Hassan Sartaj, Vasilios Andrikopoulos, Cesare Pautasso, Tommi Mikkonen, Jennifer Pérez, Tomás Bures, Martina De Sanctis, Henry Muccini, Elena Navarro, Mohamed Soliman, Uwe Zdun
2025 J jnl
Trans. Pattern Lang. Program.
Xiwei Xu, Cesare Pautasso, Sin Kuang Lo, Liming Zhu, Qinghua Lu, Ingo Weber
2025 J jnl
CoRR
Xiwei Xu, Cesare Pautasso, Sin Kuang Lo, Liming Zhu, Qinghua Lu, Ingo Weber
2025 J jnl
IEEE Softw.
Thomas Ronzon, Veronika Jungwirth, Ralph Miarka, Linda Rising, Cesare Pautasso, Olaf Zimmermann
2025 conf
ICSOC (2)
Hassan Atwi, Cesare Pautasso
2025 ed.
ICWE Workshops
Cesare Pautasso, Patrick Marcel
2025 J jnl
CoRR
Souhaila Serbout, Diana Carolina Muñoz Hurtado, Hassan Atwi, Edoardo Riggio, Cesare Pautasso
2025 B conf
VISSOFT
Souhaila Serbout, Diana Carolina Muñoz Hurtado, Hassan Atwi, Edoardo Riggio, Cesare Pautasso
2025 A conf
ICSA
Diana Carolina Muñoz Hurtado, Souhaila Serbout, Cesare Pautasso
2025 J jnl
CoRR
Antero Taivalsaari, Tommi Mikkonen, Cesare Pautasso
2025 B conf
PROFES
Edoardo Riggio, Cesare Pautasso
2025 J jnl
Empir. Softw. Eng.
Patric Genfer, Souhaila Serbout, Georg Simhandl, Uwe Zdun, Cesare Pautasso
2024 A conf
MSR
Souhaila Serbout, Cesare Pautasso
2024 J jnl
IEEE Softw.
Olaf Zimmermann, Cesare Pautasso, Stefan Kapferer, Mirko Stocker
2024 J jnl
J. Web Eng.
Souhaila Serbout, Cesare Pautasso
2024 B conf
ICWE
Souhaila Serbout, Cesare Pautasso
2024 conf
ECSA (Tracks and Workshops)
Souhaila Serbout, Cesare Pautasso
2024 conf
BPM (Blockchain and RPA Forum)
Hassan Atwi, Tom Lichtenstein, Cesare Pautasso, Mathias Weske
2023 conf
EDGE
Cesare Pautasso
2023 Misc conf
EuroPLoP
Souhaila Serbout, Amine El Malki, Cesare Pautasso, Uwe Zdun
2023 B conf
ICWE
Souhaila Serbout, Cesare Pautasso
2023 B conf
VISSOFT
Souhaila Serbout, Diana Carolina Muñoz Hurtado, Cesare Pautasso
2023 B conf
ICWE
Kari Systä, Cesare Pautasso, Antero Taivalsaari, Tommi Mikkonen
2023 conf
BPM (Blockchain and RPA Forum)
Tom Lichtenstein, Hassan Atwi, Mathias Weske, Cesare Pautasso
2023 ed.
ICSOC Workshops
Javier Troya, Raffaela Mirandola, Elena Navarro, Andrea Delgado, Sergio Segura, Guadalupe Ortiz, Cesare Pautasso, Christian Zirpins, Pablo Fernández, Antonio Ruiz-Cortés
2022 J jnl
J. Web Eng.
Fabio Di Lauro, Souhaila Serbout, Cesare Pautasso
2022 conf
SOSE
Tommi Mikkonen, Cesare Pautasso, Kari Systä, Antero Taivalsaari
2022 conf
ECSA (Tracks and Workshops)
Souhaila Serbout, Alessandro Romanelli, Cesare Pautasso
2022 J jnl
IEEE Internet Things J.
Farshad Firouzi, Bahareh J. Farahani, Mahmoud Daneshmand, Cesare Pautasso
2022 A conf
ICWS
Souhaila Serbout, Cesare Pautasso, Uwe Zdun
2022 ed.
ICWE Workshops
Maxim Bakaev, In-Young Ko, Michael Mrissa, Cesare Pautasso, Abhishek Srivastava
2022 conf
SOSE
Amine El Malki, Uwe Zdun, Cesare Pautasso
2022 J jnl
Softw. Syst. Model.
Ana Ivanchikj, Souhaila Serbout, Cesare Pautasso
2022 B conf
ECSA
Fabio Di Lauro, Souhaila Serbout, Cesare Pautasso
2022 conf
ICSA Companion
Souhaila Serbout, Fabio Di Lauro, Cesare Pautasso
2021 Misc conf
EuroPLoP
Souhaila Serbout, Cesare Pautasso, Uwe Zdun, Olaf Zimmermann
2021 B conf
ICWE
Antero Taivalsaari, Tommi Mikkonen, Cesare Pautasso, Kari Systä
2021 J jnl
Computer
Tommi Mikkonen, Cesare Pautasso, Antero Taivalsaari
2021 Misc conf
EuroPLoP
Apitchaka Singjai, Uwe Zdun, Olaf Zimmermann, Cesare Pautasso
2021 B conf
ICWE
Fabio Di Lauro, Souhaila Serbout, Cesare Pautasso
2021 conf
ICWE Workshops
Antero Taivalsaari, Tommi Mikkonen, Cesare Pautasso
2021 B conf
ICWE
Niko Mäkitalo, Tommi Mikkonen, Cesare Pautasso, Victor Bankowski, Paulius Daubaris, Risto Mikkola, Oleg Beletski
2020 J jnl
IEEE Softw.
Xabier Larrucea, Cesare Pautasso
2020 Misc conf
EuroPLoP
Olaf Zimmermann, Cesare Pautasso, Daniel Lübke, Uwe Zdun, Mirko Stocker
2020 A conf
MoDELS
Ana Ivanchikj, Souhaila Serbout, Cesare Pautasso
2020 Misc conf
EuroPLoP
Olaf Zimmermann, Daniel Lübke, Uwe Zdun, Cesare Pautasso, Mirko Stocker
2020 conf
ICCS (2)
Maude Manouvrier, Cesare Pautasso, Marta Rukoz
2020 ch.
Microservices, Science and Engineering
Ana Ivanchikj, Cesare Pautasso
2020 J jnl
Smart Learn. Environ.
Brankica Bratic, Vasileios Triglianos, Vladimir Kurbalija, Cesare Pautasso, Mirjana Ivanovic
2020 J jnl
IEEE Softw.
Cesare Pautasso, Olaf Zimmermann, Liming Zhu, Thomas Bocek, Xabier Larrucea
2020 B ed.
ICWE
Mária Bieliková, Tommi Mikkonen, Cesare Pautasso
2019 B conf
ICPE
Henning Schulz, Dusan Okanovic, André van Hoorn, Vincenzo Ferme, Cesare Pautasso
2019 J jnl
Comput. Educ.
Ivan Srba, Milos Savic, Mária Bieliková, Mirjana Ivanovic, Cesare Pautasso
2019 Misc conf
EuroPLoP
Daniel Lübke, Olaf Zimmermann, Cesare Pautasso, Uwe Zdun, Mirko Stocker
2019 conf
Microservices
Olaf Zimmermann, Mirko Stocker, Daniel Lübke, Cesare Pautasso, Uwe Zdun
2019 J jnl
J. Web Eng.
Andrea Gallidabino, Cesare Pautasso
2019 B conf
ICWE
Andrea Gallidabino, Cesare Pautasso
2019 B conf
ICWE
Tommi Mikkonen, Cesare Pautasso, Kari Systä, Antero Taivalsaari
2019 J jnl
Int. J. Web Grid Serv.
Jesus Bellido, Rosa Alarcón, Cesare Pautasso, Carla Vairetti
2019 conf
BPM Forum
Ana Ivanchikj, Cesare Pautasso
2019 J jnl
J. Web Eng.
Andrea Gallidabino, Cesare Pautasso
2018 B conf
ICPE
Vincenzo Ferme, Cesare Pautasso
2018 Misc conf
EuroPLoP
Xiwei Xu, Cesare Pautasso, Liming Zhu, Qinghua Lu, Ingo Weber
2018 conf
WEBIST (Revised Selected Papers)
Antero Taivalsaari, Tommi Mikkonen, Cesare Pautasso, Kari Systä
2018 J jnl
IEEE Cloud Comput.
Guy Pardon, Cesare Pautasso, Olaf Zimmermann
2018 ed.
ICWE Workshops
Cesare Pautasso, Fernando Sánchez-Figueroa, Kari Systä, Juan Manuel Murillo Rodríguez
2018 B conf
ICWE
Andrea Gallidabino, Cesare Pautasso
2018 conf
ICSOC Workshops
Antonio Gamez-Diaz, Pablo Fernandez, Cesare Pautasso, Ana Ivanchikj, Antonio Ruiz-Cortés
2018 conf
OTM Conferences (1)
Guillaume Rosinosky, Chahrazed Labba, Vincenzo Ferme, Samir Youcef, François Charoy, Cesare Pautasso
2018 A conf
ICSOC
Uwe Zdun, Mirko Stocker, Olaf Zimmermann, Cesare Pautasso, Daniel Lübke
2018 Misc conf
EuroPLoP
Mirko Stocker, Olaf Zimmermann, Uwe Zdun, Daniel Lübke, Cesare Pautasso
2018 conf
ESOCC Workshops
Cesare Pautasso, Erik Wilde
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Cesare Pautasso
2018 conf
ICSOC Workshops
Ana Ivanchikj, Ilija Gjorgjiev, Cesare Pautasso
2018 conf
WWW (Companion Volume)
Andrea Gallidabino, Cesare Pautasso
2018 J jnl
IEEE Softw.
Cesare Pautasso, Olaf Zimmermann
2018 J jnl
Softw. Syst. Model.
Ana Ivanchikj, Cesare Pautasso, Silvia Schreier
2018 C conf
WEBIST
Antero Taivalsaari, Tommi Mikkonen, Kari Systä, Cesare Pautasso
2017 Misc conf
EuroPLoP
Simon Harrer, Jörg Lenhard, Oliver Kopp, Vincenzo Ferme, Cesare Pautasso
2017 A conf
ICSA
Xiwei Xu, Ingo Weber, Mark Staples, Liming Zhu, Jan Bosch, Len Bass, Cesare Pautasso, Paul Rimba
2017 conf
BPM (Forum)
Daniel Lübke, Ana Ivanchikj, Cesare Pautasso
2017 J jnl
J. Web Eng.
Andrea Gallidabino, Cesare Pautasso, Tommi Mikkonen, Kari Systä, Jari-Pekka Voutilainen, Antero Taivalsaari
2017 A conf
ICSA
Antero Taivalsaari, Tommi Mikkonen, Cesare Pautasso, Kari Systä
2017 conf
UMAP (Adjunct Publication)
Vasileios Triglianos, Martin Labaj, Róbert Móro, Jakub Simko, Michal Hucko, Jozef Tvarozek, Cesare Pautasso, Mária Bieliková
2017 conf
ICSOC Workshops
Jörg Lenhard, Vincenzo Ferme, Simon Harrer, Matthias Geiger, Cesare Pautasso
2017 conf
ICWE Workshops
Andrea Gallidabino, Tommi Mikkonen, Niko Mäkitalo, Cesare Pautasso, Kari Systä, Antero Taivalsaari, Jari-Pekka Voutilainen
2017 B conf
ICWE
Andrea Gallidabino, Cesare Pautasso
2017 A conf
UMAP
Vasileios Triglianos, Sambit Praharaj, Cesare Pautasso, Alessandro Bozzon, Claudia Hauff
2017 J jnl
IEEE Softw.
Cesare Pautasso, Olaf Zimmermann, Mike Amundsen, James Lewis, Nicolai M. Josuttis
2017 J jnl
IEEE Softw.
Cesare Pautasso, Olaf Zimmermann, Mike Amundsen, James Lewis, Nicolai M. Josuttis
2017 A conf
BPM
Ana Ivanchikj, Vincenzo Ferme, Cesare Pautasso
2017 conf
BPMDS/EMMSAD@CAiSE
Vincenzo Ferme, Marigianna Skouradaki, Ana Ivanchikj, Cesare Pautasso, Frank Leymann
2017 ed.
ZEUS
Oliver Kopp, Jörg Lenhard, Cesare Pautasso
2017 conf
ICPE Companion
Vincenzo Ferme, Cesare Pautasso
2017 conf
ICSE (Companion Volume)
Vincenzo Ferme, Jörg Lenhard, Simon Harrer, Matthias Geiger, Cesare Pautasso
2016 conf
CLOSER (2)
Vincenzo Ferme, Ana Ivanchikj, Cesare Pautasso, Marigianna Skouradaki, Frank Leymann
2016 J jnl
IEEE Softw.
Olaf Zimmermann, Cesare Pautasso, Gregor Hohpe, Bobby Woolf
2016 Misc conf
EuroPLoP
Cesare Pautasso, Ana Ivanchikj, Silvia Schreier
2016 ed.
ICWE Workshops
Sven Casteleyn, Peter Dolog, Cesare Pautasso
2016 conf
CBSE
Andrea Gallidabino, Cesare Pautasso
2016 conf
BPM (Forum)
Vincenzo Ferme, Ana Ivanchikj, Cesare Pautasso
2016 B conf
EC-TEL
Vasileios Triglianos, Cesare Pautasso, Alessandro Bozzon, Claudia Hauff
2016 B conf
ICPE
Vincenzo Ferme, Cesare Pautasso
2016 A conf
CAiSE
Marigianna Skouradaki, Vincenzo Ferme, Cesare Pautasso, Frank Leymann, André van Hoorn
2016 conf
WICSA
Andrea Gallidabino, Cesare Pautasso, Ville Ilvonen, Tommi Mikkonen, Kari Systä, Jari-Pekka Voutilainen, Antero Taivalsaari
2016 ed.
RMC@ICWE
Florian Daniel, Cesare Pautasso
2016 conf
WICSA
Xiwei Xu, Cesare Pautasso, Liming Zhu, Vincent Gramoli, Alexander Ponomarev, An Binh Tran, Shiping Chen
2016 conf
WWW (Companion Volume)
Andrea Gallidabino, Cesare Pautasso
2016 A conf
MoDELS
Ana Ivanchikj, Cesare Pautasso, Silvia Schreier
2016 B ed.
ICWE
Alessandro Bozzon, Philippe Cudré-Mauroux, Cesare Pautasso
2015 C conf
CLOSER
Marigianna Skouradaki, Vincenzo Ferme, Frank Leymann, Cesare Pautasso, Dieter H. Roller
2015 conf
WICSA
Florian Haupt, Frank Leymann, Cesare Pautasso
2015 A conf
BPM
Vincenzo Ferme, Ana Ivanchikj, Cesare Pautasso
2015 B conf
ICWE
Vasileios Triglianos, Cesare Pautasso
2015 conf
BPM (Demos)
Ana Ivanchikj, Vincenzo Ferme, Cesare Pautasso
2015 conf
RMC@ICWE
Cesare Pautasso, Florian Daniel
2015 conf
ESOCC
Masiar Babazadeh, Andrea Gallidabino, Cesare Pautasso
2015 conf
ICSOC Workshops
Adriatik Nikaj, Sankalita Mandal, Cesare Pautasso, Mathias Weske
2015 conf
RMC@ICWE
Florian Daniel, Cesare Pautasso
2015 B conf
ICWE
Masiar Babazadeh, Andrea Gallidabino, Cesare Pautasso
2015 conf
RMC@ICWE
Andrea Gallidabino, Masiar Babazadeh, Cesare Pautasso
2015 B conf
ECSA
Cesare Pautasso, Ana Ivanchikj, Silvia Schreier
2015 B conf
ICPE
Marigianna Skouradaki, Dieter H. Roller, Frank Leymann, Vincenzo Ferme, Cesare Pautasso
2015 J jnl
IEEE Softw.
Cesare Pautasso, Olaf Zimmermann
2015 B conf
ICWE
Tommi Mikkonen, Kari Systä, Cesare Pautasso
2015 Misc conf
BTW
Cesare Pautasso, Dieter Roller, Frank Leymann, Vincenzo Ferme, Marigianna Skouradaki
2014 conf
ZEUS
Marigianna Skouradaki, Dieter Roller, Cesare Pautasso, Frank Leymann
2014 conf
WWW (Companion Volume)
Masiar Babazadeh, Cesare Pautasso
2014 conf
WWW (Companion Volume)
Guy Pardon, Cesare Pautasso
2014 A* conf
SoSP
Marigianna Skouradaki, Vincenzo Ferme, Cesare Pautasso, Dieter Roller, Frank Leymann
2014 J jnl
J. Vis. Lang. Comput.
Saeed Aghaee, Cesare Pautasso
2014 J jnl
Concurr. Comput. Pract. Exp.
Achille Peternier, Cesare Pautasso, Walter Binder, Daniele Bonetta
2014 J jnl
Future Gener. Comput. Syst.
Achille Peternier, Danilo Ansaloni, Daniele Bonetta, Cesare Pautasso, Walter Binder
2014 B conf
ICWE
Vasileios Triglianos, Cesare Pautasso
2014 ch.
Web Services Foundations
Cesare Pautasso
2014 C conf
Software Engineering
Domenico Bianculli, Carlo Ghezzi, Cesare Pautasso, Patrick Senti
2014 conf
WICSA
Masiar Babazadeh, Cesare Pautasso
2013 conf
WWW (Companion Volume)
Vasileios Triglianos, Cesare Pautasso
2013 J jnl
ACM Trans. Web
Jesus Bellido, Rosa Alarcón, Cesare Pautasso
2013 conf
IS-EUD
Saeed Aghaee, Cesare Pautasso
2013 J jnl
IEEE Internet Comput.
Alessio Gambi, Giovanni Toffetti, Cesare Pautasso, Mauro Pezzè
2013 conf
LIVE@ICSE
Saeed Aghaee, Cesare Pautasso
2013 B conf
VL/HCC
Saeed Aghaee, Cesare Pautasso, Antonella De Angeli
2013 conf
PESOS@ICSE
Alessio Gambi, Cesare Pautasso
2013 book
Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian
2013 A ed.
ICSOC
Samik Basu, Cesare Pautasso, Liang Zhang, Xiang Fu
2013 B conf
ECSA
Marcin Nowak, Cesare Pautasso
2013 conf
WWW (Companion Volume)
Cesare Pautasso, Masiar Babazadeh
2013 B conf
PPoPP
Daniele Bonetta, Walter Binder, Cesare Pautasso
2012 conf
ICWE Workshops
Saeed Aghaee, Cesare Pautasso
2012 B conf
ICPADS
Achille Peternier, Danilo Ansaloni, Daniele Bonetta, Cesare Pautasso, Walter Binder
2012 conf
Euro-Par
Daniele Bonetta, Danilo Ansaloni, Achille Peternier, Cesare Pautasso, Walter Binder
2012 J jnl
IEEE Internet Comput.
Tomas Vitvar, Steve Vinoski, Cesare Pautasso
2012 conf
S-Cube@ICSE
Dimka Karastoyanova, Dragan Ivanovic, Zsolt Németh, Manuel Carro, Claudia Di Napoli, Maurizio Giordano, Cesare Pautasso
2012 Misc conf
EICS
Saeed Aghaee, Marcin Nowak, Cesare Pautasso
2012 B conf
PPoPP
Daniele Bonetta, Achille Peternier, Cesare Pautasso, Walter Binder
2012 ed.
ICSOC Workshops
George Pallis, Mohamed Jmaiel, Anis Charfi, Sven Graupner, Yücel Karabulut, Sam Guinea, Florian Rosenberg, Quan Z. Sheng, Cesare Pautasso, Sonia Ben Mokhtar
2012 A* conf
ICSE
Domenico Bianculli, Carlo Ghezzi, Cesare Pautasso, Patrick Senti
2012 ed.
WS-REST
Rosa Alarcón, Cesare Pautasso, Erik Wilde
2012 conf
WAS4FI-Mashups
Saeed Aghaee, Cesare Pautasso
2011 ed.
ECOWS
Gianluigi Zavattaro, Ulf Schreier, Cesare Pautasso
2011 conf
WICSA
Daniele Bonetta, Cesare Pautasso
2011 conf
ICWE Workshops
Saeed Aghaee, Cesare Pautasso
2011 conf
BPMN
Cesare Pautasso
2011 conf
ICWE Workshops
Saeed Aghaee, Cesare Pautasso
2011 conf
SHARK@ICSE
Marcin Nowak, Cesare Pautasso
2011 ch.
REST: From Research to Practice
Cesare Pautasso, Erik Wilde
2011 conf
PPPJ
Achille Peternier, Daniele Bonetta, Walter Binder, Cesare Pautasso
2011 conf
ICSOC Workshops
Quan Z. Sheng, Cesare Pautasso, Sonia Ben Mokhtar
2011 ed.
WS-REST
Rosa Alarcón, Cesare Pautasso, Erik Wilde
2011 A conf
ICSOC
Cesare Pautasso, Erik Wilde
2011 book
Erik Wilde, Cesare Pautasso
2011 conf
WS-REST
Cesare Pautasso, Erik Wilde, Rosa Alarcón
2011 conf
WWW (Companion Volume)
Cesare Pautasso, Erik Wilde, Rosa Alarcón
2011 C conf
iiWAS
Saeed Aghaee, Cesare Pautasso
2011 ch.
REST: From Research to Practice
Guy Pardon, Cesare Pautasso
2011 B conf
SERVICES
Walter Binder, Daniele Bonetta, Cesare Pautasso, Achille Peternier, Diego Milano, Heiko Schuldt, Nenad Stojnic, Boi Faltings, Immanuel Trummer
2011 conf
WWW (Companion Volume)
Daniele Bonetta, Cesare Pautasso
2010 ed.
ECOWS
Antonio Brogi, Cesare Pautasso, George Angelos Papadopoulos
2010 C conf
APSCC
Daniele Bonetta, Achille Peternier, Cesare Pautasso, Walter Binder
2010 A conf
SEAMS
Schahram Dustdar, Christoph Dorn, Fei Li, Luciano Baresi, Giacomo Cabri, Cesare Pautasso, Franco Zambonelli
2010 conf
SHARK@ICSE
Marcin Nowak, Cesare Pautasso, Olaf Zimmermann
2010 B conf
ICWE
Giovanni Toffetti, Alessio Gambi, Mauro Pezzè, Cesare Pautasso
2010 conf
SOCA
Achille Peternier, Daniele Bonetta, Cesare Pautasso, Walter Binder
2010 conf
WS-REST
Cesare Pautasso, Erik Wilde, Alexandros Marinos
2010 J jnl
IEEE Internet Comput.
Cinzia Cappiello, Florian Daniel, Maristella Matera, Cesare Pautasso
2010 conf
Mashups
Saeed Aghaee, Cesare Pautasso
2010 ed.
Mashups
E. Michael Maximilien, Cesare Pautasso, Stefan Tai, Agnes Koschmider, Christian Zirpins
2010 ed.
WS-REST
Cesare Pautasso, Erik Wilde, Alexandros Marinos
2010 A* conf
WWW
Cesare Pautasso, Erik Wilde
2010 conf
OTM Workshops
Daniele Bonetta, Achille Peternier, Cesare Pautasso, Walter Binder
2009 ch.
Handbook of Research on Business Process Modeling
Cesare Pautasso
2009 A conf
SC
Cesare Pautasso
2009 conf
PESOS@ICSE
Domenico Bianculli, Carlo Ghezzi, Cesare Pautasso
2009 ch.
Encyclopedia of Database Systems
Cesare Pautasso
2009 conf
Software Service Engineering
Cesare Pautasso
2009 J jnl
Data Knowl. Eng.
Cesare Pautasso
2009 C conf
GPC
Francesco Lelli, Cesare Pautasso
2009 conf
OOPSLA Companion
Cesare Pautasso, Stefan Tai, E. Michael Maximilien
2009 A* conf
WWW
Cesare Pautasso, Erik Wilde
2008 conf
ICAC
Thomas Heinis, Cesare Pautasso
2008 A conf
BPM
Cesare Pautasso
2008 ed.
WEWST@ECOWS (Final Proceedings)
Thomas Gschwind, Cesare Pautasso
2008 B conf
CCGRID
Nabil Abdennadher, Peter Engel, Derek Feichtinger, Dean Flanders, Placi Flury, Sigve Haug, Pascal Jermini, Sergio Maffioletti, Cesare Pautasso, Heinz Stockinger, Wibke Sudholt, Michela Thiémard, Nadya Williams, Christoph Witzig
2008 conf
Business Process Management Workshops
Cesare Pautasso, Jana Koehler
2008 conf
ICSOC Workshops
Cesare Pautasso, Stefan Tai, E. Michael Maximilien
2008 ed.
WEWST
Cesare Pautasso, Thomas Gschwind
2008 A* conf
WWW
Cesare Pautasso, Olaf Zimmermann, Frank Leymann
2008 A ed.
SC
Cesare Pautasso, Éric Tanter
2008 conf
ICSOC Workshops
Cesare Pautasso, Monica Frisoni
2008 J jnl
Bioinform.
Andreas Quandt, Patricia Hernandez, Alexandre Masselot, Céline Hernandez, Sergio Maffioletti, Cesare Pautasso, Ron D. Appel, Frédérique Lisacek
2007 C conf
SEKE
Nelly Schuster, Olaf Zimmermann, Cesare Pautasso
2007 J jnl
Inf. Softw. Technol.
Cesare Pautasso, Thomas Heinis, Gustavo Alonso
2007 conf
AGTIVE
Jana Koehler, Thomas Gschwind, Jochen Malte Küster, Cesare Pautasso, Ksenia Ryndina, Jussi Vanhatalo, Hagen Völzer
2007 ed.
WEWST@ECOWS (Final Proceedings)
Cesare Pautasso, Christoph Bussler
2007 conf
HealthGrid
Andreas Quandt, Patricia Hernandez, Peter Kunzst, Cesare Pautasso, Marc Tuloup, Céline Hernandez, Ron D. Appel
2007 conf
ICSOC Workshops
Biörn Biörnstad, Cesare Pautasso
2006 conf
Research Results of the DICS Program
Cesare Pautasso, Win Bausch, Gustavo Alonso
2006 conf
IEEE SCC
Biörn Biörnstad, Cesare Pautasso, Gustavo Alonso
2006 J jnl
SIGMOD Rec.
Aphrodite Tsalgatidou, George Athanasopoulos, Michael Pantazoglou, Cesare Pautasso, Thomas Heinis, Roy Grønmo, Hjørdis Hoff, Arne-Jørgen Berre, M. Glittum, Simela Topouzidou
2006 J jnl
Int. J. Web Eng. Technol.
Biörn Biörnstad, Cesare Pautasso, Gustavo Alonso
2006 J jnl
IEEE Data Eng. Bull.
Cesare Pautasso, Thomas Heinis, Gustavo Alonso
2006 B conf
CCGRID
Thomas Heinis, Cesare Pautasso, Gustavo Alonso
2006 ed.
WEWST@ECOWS
Cesare Pautasso, Christoph Bussler
2005 A conf
ICWS
Cesare Pautasso, Thomas Heinis, Gustavo Alonso
2005 conf
ICAC
Thomas Heinis, Cesare Pautasso, Gustavo Alonso
2005 A conf
SC
Cesare Pautasso, Gustavo Alonso
2005 J jnl
Int. J. Electron. Commer.
Cesare Pautasso, Gustavo Alonso
2005 B conf
VL/HCC
Cesare Pautasso
2005 B conf
e-Science
Thomas Heinis, Cesare Pautasso, Oliver Deak, Gustavo Alonso
2005 J jnl
J. Vis. Lang. Comput.
Cesare Pautasso, Gustavo Alonso
2004 conf
TES
Cesare Pautasso, Gustavo Alonso
2003 B conf
CCGRID
Win Bausch, Cesare Pautasso, Gustavo Alonso
2003 conf
HCC
Cesare Pautasso, Gustavo Alonso
2002 C conf
CLUSTER
Win Bausch, Cesare Pautasso, Reto Schaeppi, Gustavo Alonso
2001 A* conf
ICDE
Gustavo Alonso, Win Bausch, Cesare Pautasso, Ari Kahn, Michael T. Hallett
redb/extractors/decompiler/bninja/decompiler.py
← Index redb/extractors/decompiler/bninja/decompiler.py python
import os
import time
import json

from .analysis.medium_level import MediumLevelAnalysis

# disable the plugins set by user for binary ninja
os.environ["BN_DISABLE_USER_PLUGINS"] = "True"
import traceback

# Binary Ninja imports (conditional)
try:
    import binaryninja
    from binaryninja import mainthread, Symbol
    from binaryninja.enums import SymbolType
    BINARYNINJA_AVAILABLE = True
except Exception:
    BINARYNINJA_AVAILABLE = False
    binaryninja = None
    mainthread = None
    Symbol = None
    SymbolType = None

# Support both package and standalone imports
try:
    # Package import (when imported from redb)
    from .utils.hashes import calculate_sha256, calculate_tlsh
    from .utils.license import set_license
    from .utils.logging import setup_default_logger
    from .analysis.strings import StringAnalysis

    # Only import modules that depend on Binary Ninja when available
    if BINARYNINJA_AVAILABLE:
        from .analysis.cfg import CFGAnalysis
        from .analysis.disassembly import DisassemblyAnalysis
        from .analysis.low_level import LowLevelAnalysis
        from .arch.creator import ArchitectureCreator
        from .custom_options import register_custom_analysis_options
        from .function_type import FunctionTypeAnalysis, FunctionType
        from .analysis.scores import ObfuscationScores

except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh
    from redb.extractors.decompiler.bninja.utils.license import set_license
    from redb.extractors.decompiler.bninja.utils.logging import setup_default_logger

    # Only import modules that depend on Binary Ninja when available
    if BINARYNINJA_AVAILABLE:
        from redb.extractors.decompiler.bninja.analysis.cfg import CFGAnalysis
        from redb.extractors.decompiler.bninja.analysis.disassembly import DisassemblyAnalysis
        from redb.extractors.decompiler.bninja.analysis.low_level import LowLevelAnalysis
        from redb.extractors.decompiler.bninja.arch.creator import ArchitectureCreator
        from redb.extractors.decompiler.bninja.custom_options import register_custom_analysis_options
        from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis


class BinaryNinjaDecompiler:
    """A Binary Ninja-based decompiler that replicates the functionality of GhidraDecompilerScript.
    This class extracts decompiled code, disassembly with multiple normalization levels,
    and control flow graph information from binary files.
    """

    MIN_FUNCTION_SIZE = 10  # instructions
    MIN_BLOCK_SIZE = 4  # instructions
    INVALID_STACK_SIZE = -1

    def __init__(
        self,
        filepath,
        timeout,
        log=None,
        exporters=None,
        index_prefix=None,
        filetype=None,
        goresym=None,
        decompile_modules=None,
    ):
        """Initialize the Binary Ninja decompiler.

        Args:
            filepath: Path to the binary file to analyze
            log: Logger object (optional)
            timeout: Maximum time in seconds for analysis (default: 1200)
            exporters: List of exporters for the results (optional)
            index_prefix: Prefix for elastic index (optional)
            filetype: Type of the file (optional)

        """
        self.filepath = filepath
        self.log = log if log else setup_default_logger("BninjaDecompiler")
        self.BNINJA_TIMEOUT = timeout
        self.bv = None
        self.analysis_results = None
        self.errors = []
        self.exporters = exporters
        self.index_prefix = index_prefix
        self.filetype = filetype
        self.goresym = goresym
        self.decompile_modules = decompile_modules or {"all"}

        set_license(binaryninja)

        # Map to track instruction categorization
        mainthread.set_worker_thread_count(3)
        register_custom_analysis_options(binaryninja)

    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.log.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 __enter__(self):
        """Context manager entry point."""
        self.log.info(f"Opening binary file: {self.filepath}")
        binaryninja.BinaryViewType.add_binaryview_initial_analysis_completion_event(
            self.on_analysis_complete
        )

        #self.bv = binaryninja.load(self.filepath, update_analysis=False)
        self.bv = binaryninja.load(self.filepath, update_analysis=True)
        if self.bv is None:
            raise ValueError(f"Failed to open file: {self.filepath}")

        self.log.info("Waiting for analysis to complete...")

        self.log.debug(f"Binja analysis complete: {len(list(self.bv.functions))} functions")

        # set the architecture
        # todo: personalize this for other architectures
        self.arch = ArchitectureCreator("x86").get()

        # apply goresym
        if self.goresym is not None:
            self.__apply_goresym()
        return self

    def on_analysis_complete(self, bv):
        # Request an additional update after analysis is complete to ensure IL generation
        self.bv = bv
        self.bv.update_analysis()

        return

    def __apply_goresym(self):
        file = self.goresym
        data = None
        try:
            data = json.loads(open(file, 'r').read())
        except Exception as e:
            self.log_error(
                "Failed to open file from goresym: ",
                file,
                e,
                "analyze_binary",
            )

        if data is None:
            return

        self.bv.begin_undo_actions()
        if data.get('UserFunctions') is not None:
            user_functions = data['UserFunctions']
            for func in user_functions:
                try:
                    start = int(func['Start'])
                    name = func['FullName']
                    if self.bv.get_function_at(start) is None:
                        self.bv.create_user_function(start)

                    sym = Symbol(SymbolType.FunctionSymbol, start, name, name, name)
                    self.bv.define_user_symbol(sym)
                except Exception as e:
                    self.log.warning(f"Failed to apply GoReSym symbol for UserFunction {func.get('FullName', 'unknown')} at {func.get('Start', 'unknown')}: {e}")

        if data.get('StdFunctions') is not None:
            standard_functions = data['StdFunctions']
            for func in standard_functions:
                try:
                    start = int(func['Start'])
                    name = func['FullName']
                    if self.bv.get_function_at(start) is None:
                        self.bv.create_user_function(start)

                    sym = Symbol(SymbolType.FunctionSymbol, start, name, name, name)
                    self.bv.define_user_symbol(sym)
                except Exception as e:
                    self.log.warning(f"Failed to apply GoReSym symbol for StdFunction {func.get('FullName', 'unknown')} at {func.get('Start', 'unknown')}: {e}")

        self.bv.commit_undo_actions()
        return

    def __exit__(self, exc_type, exc_val, exc_tb):
        """Context manager exit point - clean up resources."""
        if self.bv:
            # Make sure to cancel any pending analysis
            # (if we have no pending analysis, binary ninja will log an error)

            # todo(@nicolo): investigate
            # if hasattr(self.bv, "abort_analysis"):
            #    self.bv.abort_analysis()
            self.bv.file.close()

        self.log.info("Cleanup completed successfully")
        return

    def tag(self):
        """Return the tag for this extractor."""
        return "DECOMPILED"

    def _module_selected(self, module_name):
        """Check if a decompiler sub-module is selected."""
        return "all" in self.decompile_modules or module_name in self.decompile_modules

    def analyze_binary(self):
        """Run Binary Ninja analysis and return results.

        Respects self.decompile_modules to selectively run/skip sub-modules:
        - strings: independent, skipped if not selected
        - decompilation: leaf module, skipped if not selected
        - disassembly: always runs (backbone — provides hash linkage for all others)
        - llil: leaf module, skipped if not selected
        - cfg: leaf module, skipped if not selected

        Only selected modules' results are appended to the results dict for DB insertion.
        Disassembly is always computed for linkage but only inserted when selected.
        """
        try:
            results = {
                "decompiled": [],
                "disassembled": [],
                "cfg": [],
                "llil": [],
                "errors": [],
                "strings": [],
                "mlil": []
            }

            run_all = "all" in self.decompile_modules
            run_strings = run_all or "strings" in self.decompile_modules
            run_decompilation = run_all or "decompilation" in self.decompile_modules
            run_disassembly = run_all or "disassembly" in self.decompile_modules
            run_llil = run_all or "llil" in self.decompile_modules
            run_cfg = run_all or "cfg" in self.decompile_modules

            # Determine if we need the per-function loop at all
            need_per_function = run_decompilation or run_disassembly or run_llil or run_cfg

            #functions_list = list(filter(is_not_ext_lib_function, self.bv.functions))
            functions_list = list(filter(is_lib_or_thunk, self.bv.functions))
            functions_list = list(filter(self.is_too_few_blocks, functions_list))

            # Strings extraction — independent of per-function analysis
            if run_strings:
                results["strings"] = StringAnalysis(self.bv, functions_list).analyze()

            if not need_per_function:
                return results

            for function in functions_list:
                try:
                    # Decompilation (HLIL) — leaf module, skip if not selected
                    hlil_json = self.extract_hlil(function) if run_decompilation else None

                    # Disassembly — always compute (provides hash linkage for others)
                    disass_json = self.extract_disasm(function)

                    # CFG — leaf module, skip if not selected
                    cfg_json = self.extract_cfg(function) if run_cfg else None

                    # LLIL — leaf module, skip if not selected
                    lowlevel_json = self.extract_lowlevel(function) if run_llil else None

                    # we run mlil only if we have cfg
                    mlil_json = self.extract_mediumlevel(function) if run_llil else None

                    # Calculate fuzzy hashes for disassembly using utils.hashes
                    if disass_json:
                        disass_no_addr = disass_json.get("disassembled_function_no_addresses", "")
                        disass_json["tlsh_disassembly"] = calculate_tlsh(disass_no_addr)

                    if hlil_json and disass_json:
                        hlil_json["disassembled_function_hash"] = disass_json[
                            "disassembled_function_hash"
                        ]
                        disass_json["decompiled_function_hash"] = hlil_json[
                            "decompiled_function_hash"
                        ]

                        results["decompiled"].append(hlil_json)
                        if run_disassembly:
                            results["disassembled"].append(disass_json)

                    elif hlil_json:
                        hlil_json["disassembled_function_hash"] = None
                        results["decompiled"].append(hlil_json)
                    elif disass_json:
                        disass_json["decompiled_function_hash"] = None
                        if run_disassembly:
                            results["disassembled"].append(disass_json)

                    # Add bi-directional linkage between LLIL and disassembly with fuzzy hashes
                    # LLIL fuzzy hashes (tlsh_llil) are already calculated in lowlevel_json
                    if lowlevel_json and disass_json:
                        # Add disassembly info to LLIL
                        lowlevel_json["disassembled_function_hash"] = disass_json["disassembled_function_hash"]
                        lowlevel_json["tlsh_disassembly"] = disass_json.get("tlsh_disassembly")

                        # Add LLIL fuzzy hashes to disassembly for easy export access
                        disass_json["tlsh_llil"] = lowlevel_json.get("tlsh_llil")
                        disass_json["minhash"] = lowlevel_json.get("minhash")

                    elif lowlevel_json:
                        lowlevel_json["disassembled_function_hash"] = None
                        lowlevel_json["tlsh_disassembly"] = None
                    elif disass_json:
                        # No LLIL available for this disassembly
                        disass_json["tlsh_llil"] = None
                        disass_json["minhash"] = None

                    if lowlevel_json:
                        results["llil"].append(lowlevel_json)
                        results["mlil"].append(mlil_json)

                    # Add CFG linkage with disassembled_function_hash
                    # Also add cyclomatic_complexity to disass_json for similarity metrics export
                    if cfg_json and disass_json:
                        cfg_json["disassembled_function_hash"] = disass_json["disassembled_function_hash"]
                        disass_json["cyclomatic_complexity"] = cfg_json.get("cyclomatic_complexity")
                        results["cfg"].append(cfg_json)
                    elif cfg_json:
                        cfg_json["disassembled_function_hash"] = None
                        results["cfg"].append(cfg_json)

                    # Ensure cyclomatic_complexity is set even if no cfg_json
                    if disass_json and "cyclomatic_complexity" not in disass_json:
                        disass_json["cyclomatic_complexity"] = None

                except Exception as e:
                    self.log_error(
                        "Failed to process function: ",
                        function.name,
                        function.start,
                        e,
                        "analyze_binary",
                    )

            return results

        except Exception as e:
            self.log.error(f"Error in binary analysis: {str(e)}")
            return None

    def extract_mediumlevel(self, function):
        middle_level = MediumLevelAnalysis(function, self.bv, self.log)
        middle_level_result, errors = middle_level.analyze()

        for error in errors:
            self.errors.append(error)

        return middle_level_result


    def extract_lowlevel(self, function):
        low_level = LowLevelAnalysis(function, self.bv, self.log)
        disassembly_json, errors = low_level.analyze()

        for error in errors:
            self.errors.append(error)

        return disassembly_json

    def extract_cfg(self, function):
        try:
            llil = function.llil if hasattr(function, 'llil') else None
            cfg = CFGAnalysis(function, llil_function=llil).extract_function_cfg()
            return cfg
        except Exception as e:
            self.log_error(
                "Fatal error in CFG extraction",
                function.name,
                function.start,
                e,
                "extract_disassembly",
            )
            return None

    def extract_disasm(self, function):
        try:
            disass_analysis = DisassemblyAnalysis(
                self.arch, function, self.bv, self.log
            )

            # Create disassembly JSON
            disassembly_json, errors = disass_analysis.get_json()

            for error in errors:
                self.errors.append(error)

            return disassembly_json

        except Exception as e:
            self.log_error(
                "Fatal error in disassembly extraction",
                function.name,
                function.start,
                e,
                "extract_disassembly",
            )
            return None

    def extract_hlil(self, function):
        """Extract HLIL from a function."""
        try:
            # Access function.hlil directly - this will either return the HLIL or raise an exception
            # Removed hlil_if_available check as it was causing race conditions
            if function.hlil is None:
                return None

            if len(function.hlil.basic_blocks) == 0:
                return None

            # if function has one basic block, then compare the len of the instructions against minimum of our functions
            if len(function.hlil.basic_blocks) == 1:
                block = function.basic_blocks[0]
                if len(list(block.disassembly_text)) < self.MIN_FUNCTION_SIZE:
                    return None

            # Get decompiled code
            function_prototype = str(function)
            decompiled_code = str(function.hlil)
            if not decompiled_code or decompiled_code.strip() == "":
                self.log.warning(f"Empty decompilation result for {function.name}")
                return None

            callers = []
            for caller_site in function.caller_sites:
                if caller_site.hlil:
                    callers.append(str(caller_site.hlil))

            calls = []
            for call in function.call_sites:
                if call.hlil:
                    calls.append(str(call.hlil))

            analysis_score = ObfuscationScores(function.hlil)
            flattened_score = analysis_score.flattened_score()
            mba_score = analysis_score.MBA_score()

            if decompiled_code:
                # Create json object
                function_json = {
                    "decompiled_function_hash": calculate_sha256(decompiled_code),
                    "decompiled_function": decompiled_code,
                    "decompiled_function_name": function.name,
                    "decompiled_function_prototype": function_prototype,
                    "decompiled_function_address": function.start,
                    "function_type": FunctionTypeAnalysis(function)
                    .get_function_type()
                    .name,
                    "functions_caller": list(callers),
                    "functions_call": list(calls),
                    "flattened_score": flattened_score,
                    "mba_score": mba_score,
                }
                return function_json
            else:
                return None

        except Exception as e:
            self.log.warning(
                f"Failed to get HLIL for {function.name} at {function.start}: {str(e)}"
            )

        return None

    def extract(self) -> bool:
        """Extract and process all analysis results.

        Returns:
            bool: True if extraction was successful, False otherwise

        """
        self.log.info(f"Starting binary analysis on {self.filepath}")
        try:
            results = self.analyze_binary()
            if not results:
                self.log.error("Analysis failed to produce results")
                return False

            self.analysis_results = results
            self.log.info(
                f"Successfully analyzed binary: {len(results['decompiled'])} decompiled functions, "
                f"{len(results['disassembled'])} disassembled functions, "
                #f"{len(results['cfg'])} basic blocks, "
                f"{len(results['errors'])} errors"
            )
            return True

        except Exception as e:
            self.log.error(f"Error in extraction: {str(e)}")
            return False

    def is_too_few_blocks(self, function):
        if function is None:
            return False

        if function.basic_blocks is None:
            return False

        # when binary ninja does not wait for the analysis, it creates function stubs where basic blocks array
        # is not populated yet. Therefore, we disable this heuristic.
        #if len(function.basic_blocks) == 0:
        #    return False

        # if function has one basic block, then compare the len of the instructions against minimum of our functions
        if len(function.basic_blocks) == 1:
            block = function.basic_blocks[0]
            if len(list(block.disassembly_text)) < self.MIN_FUNCTION_SIZE:
                return False

        return True

def is_lib_or_thunk(function):
    function_type = FunctionTypeAnalysis(function).get_function_type()
    return not (function_type == FunctionType.THUNK or function_type == FunctionType.EXTERNAL or function_type == FunctionType.LIBRARY)