Gravando um programa de plataforma cruzada (compatível com 32 e 64 bits) para Windows (como AnyCPU no .NET)
Está me desconcertando como o recurso "AnyCPU" no .NET funciona: Ele carrega o executável como nativo de 32 bits se o sistema for de 32 bits e como 64 bits se o sistema for de 64 bits (o que você pode confirmar facilmente com o Gerenciador de tarefas). Então, obviamente, isso não é impossível.
A questão é: como exatamente a Microsoft fez isso? O Windows originalmente não conhecia a estrutura .NET, portanto, o Windows PE Loader não pode procurar recursos extras nos cabeçalhos do PE para o cabeçalho CLR; esse recurso deve ter sido adicionado por algum tipo de extensão no modo kernel. Mas a estrutura do .NET parece não instalar nada disso ... Perdi completamente como o mesmo executável pode ser nativo de 32 e 64 bits ao mesmo tempo, principalmente porque a desmontagem do mscoree.dll não ocorre. até mostra referências a funções nativas não documentadas.
Alguém tem algum conhecimento e / ou suposições razoáveis sobre como isso foi feito? Obviamente, é possível (não é possível dizer coisas como "não é possível") e isso me faz querer escrever umanativo EXE de plataforma cruzada ...
Editar:
Como uma observação lateral, considere como você não pode executar executáveis de 32 bits em um ambiente Windows PE de 64 bits ...obteve ser uma maneira de estender ou modificar o carregador PE com algum tipo de "plugin", certo?