Un programa compilado generalmente contiene un encabezado seguido de las instrucciones de la CPU (lo que se podría llamar "binario") + varios otros datos.
Cuando intenta decirle al sistema operativo que cargue su programa, el sistema operativo leerá el encabezado y se utiliza para verificar que el archivo ejecutable sea realmente un archivo ejecutable destinado para este sistema operativo y esta arquitectura. Es decir. para que no ejecute accidentalmente un programa Linux en Windows o similar.
El encabezado también contiene otros bits de información sobre dónde se ubican las instrucciones reales de la CPU en el archivo exeutable, donde se ubican los segmentos de datos (texto, cadenas, gráficos, etc.).
Una vez que el sistema operativo está contento de que el archivo ejecutable sea el que se supone que es, el sistema cargará los diferentes segmentos del archivo ejecutable en la memoria y le indicará a la CPU que comience a ejecutar el segmento de código "binario". Este código es "puro" en el sentido de que es un código de ensamblado de CPU directo.
Sin embargo, el sistema operativo puede interrumpir la CPU (por ejemplo, cambiar a otro programa o simplemente eliminar el programa de la memoria, etc.). Así que hay muchas cosas sucediendo alrededor de este programa en ejecución, y el SO tipo de "lo maneja" y se asegura de que se comporte como un buen chico, pero el código en sí cuando se está ejecutando es ejecutar instrucciones de CPU puro lo más rápido posible ... sin que el sistema operativo tenga que interpretar el código en el medio.
También tenga en cuenta que el programa en ejecución puede llamar al sistema operativo de varias maneras mientras se está ejecutando. Por ejemplo, para solicitar al sistema operativo que abra una ventana en la pantalla, abra una conexión de red, asigne memoria, etc. Todo lo que realmente está sucediendo es que la CPU solo salta a la ejecución del código en una ubicación diferente (es decir, salta de ejecutar el código en el ejecutable, ejecutar un código en el SO y luego salta de regreso).
Eso es todo en pocas palabras. Sin embargo, hay muchas otras formas de ejecutar programas. Hay máquinas virtuales, idiomas interpretados (como Java o Ruby, por ejemplo), etc. Y todos ejecutan programas de diferentes maneras de los lenguajes "binarios puros" tradicionales como C/C++, pero espero que esto les haya ayudado a entender cómo funciona un poco mejor.
Lo que hace binaria "verdadero" o "puro"? –