TIE: Principled Reverse Engineering of Types in Binary Programs
A recurring problem in security is reverse engineering binary code to recover high-level language data abstractions and types. High-level programming languages have data abstractions such as buffers, structures, and local variables that all help programmers and program analyses reason about programs in a scalable manner. During compilation, these abstractions are removed as code is translated down to operations on registers and one globally addressed memory region. Reverse engineering consists of "Undoing" the compilation to recover high-level information so that programmers, security professionals, and analyses can all more easily reason about the binary code.