Меня сбивает с толку, как работает функция AnyCPU в .NET: она загружает исполняемый файл как собственный 32-разрядный, если система 32-разрядная, и как 64-разрядный, если система 64-разрядная (которую вы можно легко подтвердить с помощью диспетчера задач). Очевидно, это не невозможно.
Вопрос в том, как именно Microsoft сделала это? Изначально Windows не знала о платформе .NET, поэтому загрузчик Windows PE не может искать какие-либо дополнительные функции в заголовках PE для заголовка CLR; эта функция должна быть добавлена каким-то расширением режима ядра. Но .NET Framework, похоже, не устанавливает ничего подобного ... Я в полной растерянности из-за того, что один и тот же исполняемый файл может быть как 32-разрядным, так и 64-разрядным одновременно, тем более что разборка mscoree.dll не даже не показывает ссылки на недокументированные нативные функции.
Есть ли у кого-нибудь какие-либо знания и / или разумные предположения о том, как это было сделано? Это, очевидно, возможно (поэтому не говоря о таких вещах, как «это невозможно»), и мне хочется попробовать написать native кросс-платформенный EXE ...
Edit:
В качестве примечания рассмотрим, как вы не можете запускать 32-битные исполняемые файлы в 64-битной среде Windows PE ... может быть некоторым способом расширения или изменения загрузчика PE с помощью какой-то "плагин", верно?