Это зависит от ОС и зависит от типа программы.
Программы могут быть разные, исполняемые файлы могут быть разного типа.
В общих словах да, ОС читает сигнатуру, определяет тип исполняемого файла, затем выполняет загрузку согласно этому типу - читает заголовки, загружает нужное и передает управление.
Не обязательно все грузится в память, так как некоторые программы подгружают ресурсы по мере надобности, даже если они прямо в исполняемом файле, а в Линукс можно отобразить файл в память.
Для виндовс, почитай про PE формат - это основной формат исполняемых (.com был в ДОС, там было очень просто но он уже не используется)
https://en.wikipedia.org/wiki/Portable_Executable
Вот еще хорошая статья
https://medium.com/@db2crush/process-of-loading-pr...