\section{Introduction} \label{sec:intro} DataFlowAPI aggregates a collection of dataflow analysis algorithms that are useful in Dyninst development into a single library. These algorithms can also be foundations for users to build customized analyses. Currently, these algorithms include: \begin{itemize}[leftmargin=0pt,label=$\circ$] {\item {\scshape Slicing} takes a program location as input and can either slice backward to determine which instructions affect the results of the given program location, or slice forward to determine which instructions are affected by the results of the given program location. One key feature of our slicing implementation is that users can control where and when to stop slicing through a set of call back functions. } {\item {\scshape Stack Analysis} determines whether or not a register or memory location points to the stack. If it does point to the stack, Stack Analysis may be able to determine the exact stack location that is pointed to. } {\item {\scshape Symbolic Expansion and Evaluation} convert instructions to several symbolic expressions. Each symbolic expression represents the overall effects of these instructions on a register or a memory location. } {\item {\scshape Register Liveness} determines whether a register is live or not at a program location. A register is live at a program location if it will be used later in the program before its content is overwritten. } \end{itemize}