  Much software, whether beneficent or malevolent, is distributed only as
binaries, sans source code. Absent source code, understanding binaries'
behavior can be quite challenging, especially when compiled under higher levels
of compiler optimization. These optimizations can transform comprehensible,
"natural" source constructions into something entirely unrecognizable. Reverse
engineering binaries, especially those suspected of being malevolent or guilty
of intellectual property theft, are important and time-consuming tasks. There
is a great deal of interest in tools to "decompile" binaries back into more
natural source code to aid reverse engineering. Decompilation involves several
desirable steps, including recreating source-language constructions, variable
names, and perhaps even comments. One central optimization step in creating
binaries is inlining functions. Recovering these inlined functions from
optimized binaries is an essential task that most state-of-the-art decompiler
tools try to do but do not perform very well. In this paper, we evaluate a
supervised learning approach to the problem of recovering inlined functions. We
leverage open-source software and develop an automated labeling scheme to
generate a reasonably large dataset of binaries labeled with inlined functions.
We augment this large but limited labeled dataset with a pre-training step,
which learns the decompiled code statistics from a much larger unlabeled
dataset. Thus augmented, our learned labeling model can be combined with an
existing decompilation tool, Ghidra, to achieve substantially improved
performance in inlined function recovery, especially at higher levels of
optimization.
