Объедините исполняемые файлы x86 и x64 в один исполняемый файл (например, инструменты Sysinternals) - PullRequest
1 голос
/ 01 декабря 2010

Я пишу программу на Visual C ++ в чистом Win32 API. Насколько я понимаю, мне нужно отдельно скомпилировать и сгенерировать исполняемый файл для архитектуры x86 и x64.

Как мне объединить их в один исполняемый файл и создать x64 во время выполнения? Я видел, как инструменты Sysinternals делают то же самое, но не знаю, как это делается программно.

Должен ли я включить свою версию x64 в качестве ресурса в x86, а затем записать в файловую систему и сделать CreateProcess?

Есть указатели?

1 Ответ

3 голосов
/ 01 декабря 2010

Да, они встраивают определенный драйвер в качестве ресурса. Вот скриншот из Visual Studio после использования File + Open + File, чтобы открыть их утилиту Handle.exe:

alt text

Не совсем уверен, что они есть, но похоже, что они охватывают Windows 9x, 32-битные и 64-битные. Следующее, что они должны сделать, это использовать функции API ресурсов (FindResource, SizeofResource, LockResource) и WriteFile () содержимое ресурса для файла в доступном для записи каталоге. Затем загрузите драйвер с помощью CreateService и StartService.

Основная программа - x86, поэтому она работает на любой версии Windows. Генерация двоичных файлов во время выполнения не очень удобная для пользователя вещь, между прочим, им (и их антивирусному сканеру) обычно нравится знать, откуда они пришли.

...