  Detecting buffer overruns from a source code is one of the most common and
yet challenging tasks in program analysis. Current approaches have mainly
relied on rigid rules and handcrafted features devised by a few experts,
limiting themselves in terms of flexible applicability and robustness due to
diverse bug patterns and characteristics existing in sophisticated real-world
software programs. In this paper, we propose a novel, data-driven approach that
is completely end-to-end without requiring any hand-crafted features, thus free
from any program language-specific structural limitations. In particular, our
approach leverages a recently proposed neural network model called memory
networks that have shown the state-of-the-art performances mainly in
question-answering tasks. Our experimental results using source codes
demonstrate that our proposed model is capable of accurately detecting simple
buffer overruns. We also present in-depth analyses on how a memory network can
learn to understand the semantics in programming languages solely from raw
source codes, such as tracing variables of interest, identifying numerical
values, and performing their quantitative comparisons.
