Learn More
Systems code is often written in low-level languages like C/C++, which offer many benefits but also delegate memory management to programmers. This invites memory safety bugs that attackers can exploit to divert control flow and compromise the system. Deployed defense mechanisms (e.g., ASLR, DEP) are incomplete, and stronger defense mechanisms (e.g., CFI)(More)
This paper presents S2E, a platform for analyzing the properties and behavior of software systems. We demonstrate S2E's use in developing practical tools for comprehensive performance profiling, reverse engineering of proprietary software, and bug finding for both kernel-mode and user-mode binaries. Building these tools on top of S2E took less than 770 LOC(More)
DDT is a system for testing closed-source binary device drivers against undesired behaviors, like race conditions , memory errors, resource leaks, etc. One can metaphorically think of it as a pesticide against device driver bugs. DDT combines virtualization with a specialized form of symbolic execution to thoroughly exercise tested drivers; a set of modular(More)
This article presents S<sup>2</sup>E, a platform for analyzing the properties and behavior of software systems, along with its use in developing tools for comprehensive performance profiling, reverse engineering of proprietary software, and automated testing of kernel-mode and user-mode binaries. Conceptually, S<sup>2</sup>E is an automated path explorer(More)
Security vulnerabilities plague modern systems because writing secure systems code is hard. Promising approaches can retrofit security automatically via runtime checks that implement the desired security policy, these checks guard critical operations, like memory accesses. Alas, the induced slowdown usually exceeds by a wide margin what system users are(More)
Symbolic execution has proven to be a practical technique for building automated test case generation and bug finding tools. Nevertheless, due to state explosion, these tools still struggle to achieve scalability. Given a program, one way to reduce the number of states that the tools need to explore is to merge states obtained on different paths. Alas,(More)
Developers rely on automated testing and verification tools to gain confidence in their software. The input to such tools is often generated by compilers that have been designed to generate code that runs fast, not code that can be verified easily and quickly. This makes the verification tool's task unnecessarily hard. We propose that compilers support a(More)
—Control-flow hijack attacks remain a major security problem, despite many years of research aimed at mitigating them. Code-Pointer Integrity (CPI) [2] is the first protection mechanism that systematically prevents all such attacks while keeping performance overhead low. In the upcoming S&P'15 paper, Evans et al. [1] claim that CPI can be bypassed on x86-64(More)
The oxygen evolution reaction (OER) is an enabling process for technologies in the area of energy conversion and storage, but its slow kinetics limits its efficiency. We performed an electrochemical evaluation of 14 different perovskites of variable composition and stoichiometry as OER electrocatalysts in alkaline media. We particularly focused on improved(More)
Modified acrylate polymers are able to effectively exfoliate and stabilize pristine graphene nanosheets in aqueous media. Starting with pre-exfoliated graphite greatly promotes the exfoliation level. The graphene concentration is significantly increased up to 11 mg mL(-1) by vacuum evaporation of the solvent from the dispersions under ambient temperature.(More)