Почему утилита corflags не предупреждает при маркировке сборок x64 как x86? - PullRequest
2 голосов
/ 22 ноября 2008

Если я установлю флаги платформы MyApp.exe на x64 Я все еще могу запустить утилиту corflags так:
corflags / 32bit + MyApp.exe
corflags с радостью установит 32-битный флаг в 1. Конечно, когда я попытаюсь запустить приложение, я получу ошибку: 0xC000007B = STATUS_INVALID_IMAGE_FORMAT

У меня вопрос: есть ли способ, чтобы сборка, построенная на x64, могла работать как x86? или просто утилита corflags не заботится?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2008

Компиляция вашего двоичного файла с установкой «Тип платформы» на x64 также изменяет заголовок PE изображения, чтобы сделать его только 64-разрядным Это можно увидеть, например, с помощью Dependency Walker .

Наличие 64-битного PE-заголовка, по-видимому, имеет приоритет над 32-битными только флагами. Загрузчик win32 для .NET, похоже, видит, что PE-заголовок несовместим с текущей системой (64 бита в 32-битной системе). Это предотвращает загрузку собственного образа и, кроме того, части образа .NET для сборки.

Однако я не знаю ни одного инструмента, способного обновлять PE-заголовок. Похоже, это не просто вопрос изменения флага для установки изображения на 32 бита. (См. это сообщение в блоге )

0 голосов
/ 22 ноября 2008

Поскольку, если вы не загружаете собственную DLL, нет причины, по которой вы не могли бы отметить ее как 32-разрядную. Если это чистый MSIL, решение не так много значит.

...