То, что вы ищете, объяснено в очень сжатой форме в CLR через C # Джеффри Ритчером.
На самом деле есть заголовки, в основном PE-слушатель и CLR-заголовок, который помогает окнам решать, является ли exe нативным exe или.net exe.
Вы можете использовать dumpbin exe, если хотите сами посмотреть заголовки exe.