31 research outputs found

    Valgrind A Program Supervision Framework

    Get PDF
    AbstractValgrind is a programmable framework for creating program supervision tools such as bug detectors and profilers. It executes supervised programs using dynamic binary translation, giving it total control over their every part without requiring source code, and without the need for recompilation or relinking prior to execution.New supervision tools can be easily created by writing skins that plug into Valgrind's core. As an example, we describe one skin that performs Purify-style memory checks for C and C++ programs

    Technical Report Number 606 Dynamic binary analysis and

    No full text
    Dynamic binary analysis (DBA) tools such as profilers and checkers help programmers create better software. Dynamic binary instrumentation (DBI) frameworks make it easy to build new DBA tools. This dissertation advances the theory and practice of dynamic binary analysis and instrumentation, with an emphasis on the importance of the use and support of metadata. The dissertation has three main parts. The first part describes a DBI framework called Valgrind which provides novel features to support heavyweight DBA tools that maintain rich metadata, especially location metadata— the shadowing of every register and memory location with a metavalue. Location metadata is used in shadow computation, a kind of DBA where every normal operation is shadowed by an abstract operation. The second part describes three powerful DBA tools. The first tool performs detailed cache profiling. The second tool does an old kind of dynamic analysis—bounds-checking—in a new way. The third tool produces dynamic data flow graphs, a novel visualisation that cut

    1 Tracking Bad Apples:Reporting the Origin of Null and Undefined Value Errors

    No full text
    Abstract Programs sometimes crash due to unusable values, for ex-ample, when Java and C # programs dereference null pointers and when C and C++ programs use undefined values toaffect program behavior. A stack trace produced on such a crash identifies the effect of the unusable value, not its cause,and is often not much help to the programmer

    The Cache Behaviour of Large Lazy Functional Programs on Stock Hardware

    No full text
    Lazy functional programs behave differently from imperative programs and these differences extend to cache behaviour. We use hardware counters and a simple yet accurate execution cost model to analyse some large Haskell programs on the x86 architecture. The programs do not interact well with modern processors -- L2 cache data miss stalls and branch misprediction stalls account for up to 60% and 32% of execution time respectively. Moreover, the program code exhibits little exploitable instruction-level parallelism. We then use simulation to pinpoint..
    corecore