Petr Ročkai
Current Organizations / Institutes
The organizations/institutes from the scholar's latest article
Research Subjects
Research Interests
Petr Ročkai has a total of 37 co-authors. Here are the top co-authors by number of shared publications:
Jiří Barnat
Faculty of Informatics, Masaryk University, Brno, Czech Republic
14 shared publications- Jiří Barnat
Faculty of Informatics Masaryk University Brno Czech Republic
10 shared publications Luboš Brim
Masaryk University
6 shared publicationsJiri Barnat
Masaryk University
5 shared publicationsLubos Brim
Masaryk University
5 shared publicationsVladimír Štill
4 shared publications
Latest Publications
- Open Access
- 8 September 2022
- Published by Association for Computing Machinery (ACM) in ACM Transactions on Software Engineering and Methodology
- Vol. 31 (4) , 1-27
Verification of Programs Sensitive to Heap Layout
Most C and C++ programs use dynamically allocated memory (often known as a heap) to store and organize their data. In practice, it can be useful to compare addresses of different heap objects, for instance, to store them in a binary search tree or a sorted array. However, comparisons of pointers to distinct objects are inherently ambiguous: The address order of two objects can be reversed in different executions of the same program, due to the nature of the allocation algorithm and other external factors. This poses a significant challenge to program verification, since a sound verifier must consider all possible behaviors of a program, including an arbitrary reordering of the heap. A naive verification of all possibilities, of course, leads to a combinatorial explosion of the state space: For this reason, we propose an under-approximating abstract domain that can be soundly refined to consider all relevant heap orderings. We have implemented the proposed abstract domain and evaluated it against several existing software verification tools on a collection of pointer-manipulating programs. In many cases, existing tools only consider a single fixed heap order, which is a source of unsoundness. We demonstrate that using our abstract domain, this unsoundness can be repaired at only a very modest performance cost. Additionally, we show that, even though many verifiers ignore it, ambiguous behavior is present in a considerable fraction of programs from software verification competition ( sv-comp ).
- 8 September 2022
- Published by Association for Computing Machinery (ACM) in ACM Transactions on Software Engineering and Methodology
- Vol. 31 (4) , 1-27
Open AccessVerification of Programs Sensitive to Heap Layout
Most C and C++ programs use dynamically allocated memory (often known as a heap) to store and organize their data. In practice, it can be useful to compare addresses of different heap objects, for instance, to store them in a binary search tree or a sorted array. However, comparisons of pointers to distinct objects are inherently ambiguous: The address order of two objects can be reversed in different executions of the same program, due to the nature of the allocation algorithm and other external factors. This poses a significant challenge to program verification, since a sound verifier must consider all possible behaviors of a program, including an arbitrary reordering of the heap. A naive verification of all possibilities, of course, leads to a combinatorial explosion of the state space: For this reason, we propose an under-approximating abstract domain that can be soundly refined to consider all relevant heap orderings. We have implemented the proposed abstract domain and evaluated it against several existing software verification tools on a collection of pointer-manipulating programs. In many cases, existing tools only consider a single fixed heap order, which is a source of unsoundness. We demonstrate that using our abstract domain, this unsoundness can be repaired at only a very modest performance cost. Additionally, we show that, even though many verifiers ignore it, ambiguous behavior is present in a considerable fraction of programs from software verification competition ( sv-comp ).
- 1 April 2022
- Published by Springer Nature in International Journal on Software Tools for Technology Transfer
- Vol. 24 (3) , 493-510
DivSIM , an interactive simulator for LLVM bitcode
- 1 April 2022
- Published by Springer Nature in International Journal on Software Tools for Technology Transfer
- Vol. 24 (3) , 493-510
DivSIM , an interactive simulator for LLVM bitcode
- Open Access
- 5 November 2020
- Published by MDPI AG in Applied Sciences
- Vol. 10 (21) , 7853
Abstracting Strings for Model Checking of C Programs
Data type abstraction plays a crucial role in software verification. In this paper, we introduce a domain for abstracting strings in the C programming language, where strings are managed as null-terminated arrays of characters. The new domain M-String is parametrized on an index (bound) domain and a character domain. By means of these different constituent domains, M-Strings captures shape information on the array structure as well as value information on the characters occurring in the string. By tuning these two parameters, M-String can be easily tailored for specific verification tasks, balancing precision against complexity. The concrete and the abstract semantics of basic operations on strings are carefully formalized, and soundness proofs are fully detailed. Moreover, for a selection of functions contained in the standard C library, we provide the semantics for character access and update, enabling an automatic lifting of arbitrary string-manipulating code into our new domain. An implementation of abstract operations is provided within a tool that automatically lifts existing programs into the M-String domain along with an explicit-state model checker. The accuracy of the proposed domain is experimentally evaluated on real-case test programs, showing that M-String can efficiently detect real-world bugs as well as to prove that program does not contain them after they are fixed.
- 5 November 2020
- Published by MDPI AG in Applied Sciences
- Vol. 10 (21) , 7853
Open AccessAbstracting Strings for Model Checking of C Programs
Data type abstraction plays a crucial role in software verification. In this paper, we introduce a domain for abstracting strings in the C programming language, where strings are managed as null-terminated arrays of characters. The new domain M-String is parametrized on an index (bound) domain and a character domain. By means of these different constituent domains, M-Strings captures shape information on the array structure as well as value information on the characters occurring in the string. By tuning these two parameters, M-String can be easily tailored for specific verification tasks, balancing precision against complexity. The concrete and the abstract semantics of basic operations on strings are carefully formalized, and soundness proofs are fully detailed. Moreover, for a selection of functions contained in the standard C library, we provide the semantics for character access and update, enabling an automatic lifting of arbitrary string-manipulating code into our new domain. An implementation of abstract operations is provided within a tool that automatically lifts existing programs into the M-String domain along with an explicit-state model checker. The accuracy of the proposed domain is experimentally evaluated on real-case test programs, showing that M-String can efficiently detect real-world bugs as well as to prove that program does not contain them after they are fixed.
- 23 October 2020
- Published by Springer Nature in Software and Systems Modeling
- Vol. 20 (2) , 363-382
Reproducible execution of POSIX programs with DiOS
- 23 October 2020
- Published by Springer Nature in Software and Systems Modeling
- Vol. 20 (2) , 363-382
Reproducible execution of POSIX programs with DiOS
- 13 August 2020
- Published by Springer Nature
- p. 46-60
Model Checking in a Development Workflow: A Study on a Concurrent C++ Hash Table
- 13 August 2020
- Published by Springer Nature
- p. 46-60
Model Checking in a Development Workflow: A Study on a Concurrent C++ Hash Table
- 13 August 2020
- Published by Springer Nature
- p. 30-45
Compiling C and C++ Programs for Dynamic White-Box Analysis
- 13 August 2020
- Published by Springer Nature
- p. 30-45
Compiling C and C++ Programs for Dynamic White-Box Analysis
- 9 September 2019
- Published by Springer Nature in Lecture Notes in Computer Science
- p. 333-349
Reproducible Execution of POSIX Programs with DiOS
- 9 September 2019
- Published by Springer Nature in Lecture Notes in Computer Science
- p. 333-349
Reproducible Execution of POSIX Programs with DiOS
- 25 July 2019
- Published by Springer Nature in Lecture Notes in Computer Science
- p. 127-142
A Simulator for LLVM Bitcode
- 25 July 2019
- Published by Springer Nature in Lecture Notes in Computer Science
- p. 127-142
A Simulator for LLVM Bitcode
- Open Access
A Simulator for LLVM Bitcode
In this paper, we introduce an interactive simulator for programs in the form of LLVM bitcode. The main features of the simulator include precise control over thread scheduling, automatic checkpoints and reverse stepping, support for source-level information about functions and variables in C and C++ programs and structured heap visualisation. Additionally, the simulator is compatible with DiVM (DIVINE VM) hypercalls, which makes it possible to load, simulate and analyse counterexamples from an existing model checker.
Open AccessA Simulator for LLVM Bitcode
In this paper, we introduce an interactive simulator for programs in the form of LLVM bitcode. The main features of the simulator include precise control over thread scheduling, automatic checkpoints and reverse stepping, support for source-level information about functions and variables in C and C++ programs and structured heap visualisation. Additionally, the simulator is compatible with DiVM (DIVINE VM) hypercalls, which makes it possible to load, simulate and analyse counterexamples from an existing model checker.
- 1 September 2018
- Published by Elsevier in Journal of Systems and Software
- Vol. 143, 1-13
DiVM: Model checking with and graph memory- 1 September 2018
- Published by Elsevier in Journal of Systems and Software
- Vol. 143, 1-13
DiVM: Model checking with and graph memory