Petr Rockai

dblp:35/5000 · DBLP profile ↗
← Back
26ranked-venue papers
7as first author
4since 2021 · last 2022
0000-0002-8484-1063ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 25 · 7 first-author · 4 since 2021Theory of computation · 3
YearPublicationVenuePosition
2022 LART: Compiled Abstract Execution - (Competition Contribution)
abstract
Abstract lart – llvm abstraction and refinement tool – originates from the divine model-checker [5, 7], in which it was employed as an abstraction toolchain for the llvm interpreter. In this contribution, we present a stand-alone tool that does not need a verification backend but performs the verification natively. The core idea is to instrument abstract semantics directly into the program and compile it into a native binary that performs program analysis. This approach provides a performance gain of native execution over the interpreted analysis and allows compiler optimizations to be employed on abstracted code, further extending the analysis efficiency. Compilation-based abstraction introduces new challenges solved by lart, like domain interaction of concrete and abstract values simulation of nondeterministic runtime or constraint propagation.
Henrich Lauko, Petr Rockai
TACAS (2)2
2022 DivSIM , an interactive simulator for LLVM bitcode
Petr Rockai, Jiri Barnat
Int. J. Softw. Tools Technol. Transf.1
2022 Verification of Programs Sensitive to Heap Layout
abstract
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 ).
Henrich Lauko, Lukás Korencik, Petr Rockai
ACM Trans. Softw. Eng. Methodol.3
2021 Reproducible execution of POSIX programs with DiOS
Petr Rockai, Zuzana Baranová, Jan Mrázek, Katarína Kejstová, Jiri Barnat
Softw. Syst. Model.1
2020 On Symbolic Execution of Decompiled Programs
abstract
In this paper, we present a combination of existing and new tools that together make it possible to apply formal verification methods to programs in the form of ×86_64 machine code. Our approach first uses a decompilation tool (remill) to extract low-level intermediate representation (LLVM) from the machine code. This step consists of instruction translation (i.e. recovery of operation semantics), control flow extraction and address identification.The main contribution of this paper is the second step, which builds on data flow analysis and refinement of indirect (i.e. data-dependent) control flow. This step makes the processed bitcode much more amenable to formal analysis.To demonstrate the viability of our approach, we have compiled a set of benchmark programs into native executables and analysed them using two LLVM-based tools: DIVINE, a software model checker and KLEE, a symbolic execution engine. We have compared the outcomes to direct analysis of the same programs.
Lukás Korencik, Petr Rockai, Henrich Lauko, Jiri Barnat
QRS2
2019 A Simulator for LLVM Bitcode
Petr Rockai, Jiri Barnat
FMICS1
2019 Reproducible Execution of POSIX Programs with DiOS
Petr Rockai, Zuzana Baranová, Jan Mrázek, Katarína Kejstová, Jiri Barnat
SEFM1
2019 String Abstraction for Model Checking of C Programs
Agostino Cortesi, Henrich Lauko, Martina Olliaro, Petr Rockai
SPIN4
2019 Extending DIVINE with Symbolic Verification Using SMT - (Competition Contribution)
abstract
DIVINE is an LLVM -based verification tool focusing on analysis of real-world C and C++ programs. Such programs often interact with their environment, for example via inputs from users or network. When these programs are analyzed, it is desirable that the verification tool can deal with inputs symbolically and analyze runs for all inputs. In DIVINE , it is now possible to deal with input data via symbolic computation instrumented into the original program at the level of LLVM bitcode. Such an instrumented program maintains symbolic values internally and operates directly on them. Instrumentation allows us to enhance the tool with support for symbolic data without substantial modifications of the tool itself. Namely, this competition contribution uses SMT formulae for representation of input data.
Henrich Lauko, Vladimír Still, Petr Rockai, Jiri Barnat
TACAS (3)3
2018 Symbolic Computation via Program Transformation
Henrich Lauko, Petr Rockai, Jiri Barnat
ICTAC2
2018 DiVM: Model checking with LLVM and graph memory
Petr Rockai, Vladimír Still, Ivana Cerná, Jiri Barnat
J. Syst. Softw.1
2017 Model Checking of C and C++ with DIVINE 4
Zuzana Baranová, Jiri Barnat, Katarína Kejstová, Tadeás Kucera, Henrich Lauko, Jan Mrázek, Petr Rockai, Vladimír Still
ATVA7
2017 Using Off-the-Shelf Exception Support Components in C++ Verification
abstract
An important step toward adoption of formal methods in software development is support for mainstream programming languages. Unfortunately, these languages are often rather complex and come with substantial standard libraries. However, by choosing a suitable intermediate language, most of the complexity can be delegated to existing execution-oriented (as opposed to verification-oriented) compiler frontends and standard library implementations. In this paper, we describe how support for C++ exceptions can take advantage of the same principle. Our work is based on DiVM, an LLVM-derived, verification-friendly intermediate language. Our implementation consists of 2 parts: an implementation of the 'libunwind' platform API which is linked to the program under test and consists of 9 C functions. The other part is a preprocessor for LLVM bitcode which prepares exception-related metadata and replaces associated special-purpose LLVM instructions.
Vladimír Still, Petr Rockai, Jiri Barnat
QRS2
2017 From Model Checking to Runtime Verification and Back
Katarína Kejstová, Petr Rockai, Jiri Barnat
RV2
2016 DIVINE: Explicit-State LTL Model Checker - (Competition Contribution)
Vladimír Still, Petr Rockai, Jiri Barnat
TACAS2
2016 Model checking C++ programs with exceptions
Petr Rockai, Jiri Barnat, Lubos Brim
Sci. Comput. Program.1
2015 Techniques for Memory-Efficient Model Checking of C and C++ Code
Petr Rockai, Vladimír Still, Jiri Barnat
SEFM1
2015 Fast, Dynamically-Sized Concurrent Hash Table
Jiri Barnat, Petr Rockai, Vladimír Still, Jirí Weiser
SPIN2
2013 DiVinE 3.0 - An Explicit-State Model Checker for Multithreaded C & C++ Programs
Jiri Barnat, Lubos Brim, Vojtech Havel, Jan Havlícek, Jan Kriho, Milan Lenco, Petr Rockai, Vladimír Still, Jirí Weiser
CAV7
2012 Tool Chain to Support Automated Formal Verification of Avionics Simulink Designs
Jiri Barnat, Jan Beran, Lubos Brim, Tomas Kratochvila, Petr Rockai
FMICS5
2012 On-the-fly parallel model checking algorithm that is optimal for verification of weak LTL properties
Jiri Barnat, Lubos Brim, Petr Rockai
Sci. Comput. Program.3
2010 Parallel Partial Order Reduction with Topological Sort Proviso
abstract
Partial order reduction and distributed-memory processing are the two essential techniques to fight the well-known state space explosion problem in explicit state model checking. Unfortunately, these two techniques have not been integrated yet to a satisfactory degree. While for verification of safety properties, there are a few rather successful approaches to parallel partial order reduction, for LTL model checking all suggested approaches are either too technically involved to be smoothly incorporated with the existing parallel algorithms, or they are simply weak in the sense that the achieved reduction in the size of the state space is minor. The main source of difficulties is the cycle proviso that requires one fully expanded state on every cycle in the reduced state space graph. This can be easily achieved in the sequential case by employing depth-first search strategy for state space generation. Unfortunately, this strategy is incompatible with parallel (hence distributed-memory) processing, which limits application of partial order reduction technique to the sequential case. In this paper we suggest a new technique that guarantees correct construction of the reduced state space graph w.r.t. the cycle proviso. Our new technique is fully compatible with the parallel graph traversal procedure while at the same time it provides competitive reduction of the state space if compared to the serial case. The new technique has been implemented within the parallel and distributed-memory LTL model checker DiVinE and its performance is reported in this paper.
Jiri Barnat, Lubos Brim, Petr Rockai
SEFM3
2010 Scalable shared memory LTL model checking
Jiri Barnat, Lubos Brim, Petr Rockai
Int. J. Softw. Tools Technol. Transf.3
2009 A Time-Optimal On-the-Fly Parallel Algorithm for Model Checking of Weak LTL Properties
Jiri Barnat, Lubos Brim, Petr Rockai
ICFEM3
2008 DiVinE Multi-Core - A Parallel LTL Model-Checker
Jiri Barnat, Lubos Brim, Petr Rockai
ATVA3
2006 DiVinE - A Tool for Distributed Verification
Jiri Barnat, Lubos Brim, Ivana Cerná, Pavel Moravec 0002, Petr Rockai, Pavel Simecek
CAV5