Code analyzers lay at the boundary of program analysis and microarchitectural knowledge. In order to understand their internal models, and how they derive performance metrics from them, notions on both of those worlds are needed. This first chapter aims to lay the foundations for this manuscript. To this end, we first go over a coarse-grained view of the microarchitectural details of the parts of a modern processor relevant to our works. We then introduce notions and metrics on program analysis that will be used throughout this thesis. Finally, we summarize the current state of the art in the field of code analyzers, and relevant neighbouring topics.