Dynamic binary translation allows us to analyze a program during execution
without the need for a compiler or the program's source code. In this work, we
present two applications of dynamic binary translation: tracematches and unread
memory detection.
Libraries are ubiquitous in modern software development. Each library requires
that its clients follow certain conventions, depending on the domain of the
library. Tracematches are a particularly expressive notation for specifying
library usage conventions, but have only been implemented on top of Java. In
this work, we leverage dynamic binary translation to enable the use of
tracematches on executables, particularly for compiled C/C++ programs.
The presence of memory that is never read, or memory writes that are never read
during execution is wasteful, and may be also be indicative of bugs. In addition
to tracematches, we present an unread memory detector. We built this detector
using dynamic binary translation.
We have implemented a tool which monitors tracematches on top of the Pin
framework along with unread memory. We describe the operation of our tool using
a series of motivating examples and then present our overall monitoring
approach. Finally, we include benchmarks showing the overhead of our tool on 4
open source projects and report qualitative results.
Identifer | oai:union.ndltd.org:WATERLOO/oai:uwspace.uwaterloo.ca:10012/6206 |
Date | January 2011 |
Creators | Eyolfson, Jonathan |
Source Sets | University of Waterloo Electronic Theses Repository |
Language | English |
Detected Language | English |
Type | Thesis or Dissertation |
Page generated in 0.0016 seconds