Я пытался выяснить, как работают установщики и как они объединяют все в один исполняемый файл и как создать свой собственный. Я попытался использовать шестнадцатеричный редактор под названием HxD, который позволяет вам экспортировать текущий шестнадцатеричный дамп файла в .c
исходный файл с массивом, содержащим шестнадцатеричный дамп, который выглядит следующим образом.
В восторге, я попытался написать файл, используя простой код C ++:
ofstream newbin("test.exe", ios::binary);
newbin << hex << rawData;
newbin.close();
... а затем попытался запустить его.
После некоторых дальнейших исследований выясняется, что моя маленькая программа пишет только заголовок MZ.
, который PE-файлы используют в Windows, и исключает остальную часть кода. Созданный исполняемый файл имеет шестнадцатеричный дамп 4D 5A 90
или ASCII MZ.
. Это ошибка в моем кодировании? Почему он не записывает шестнадцатеричные данные? Нужно ли использовать какой-нибудь инструмент или сборку более низкого уровня? Если так, есть ли библиотеки C / C ++, которые позволяют мне писать на таком уровне? Спасибо!