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