Почему утилита corflags не предупреждает при маркировке сборок x64 как x86?

StackOverflow https://stackoverflow.com/questions/311158

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top