Почему не запускается программа записанная из массива байтов?
я из 16-ричного редактора беру байты и записываю их в массив :
unsigned char DllData[11264] = {
0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,...}
потом записываю в exe файл:
std::fstream DllData_s("test.exe", std::ios::in | std::ios::out | std::ios::app);
for (int i = 0; i < sizeof(DllData); i++)
{
DllData_s << DllData[i];
}
DllData_s.close();
И пытаюсь его запустить,но он не запускается и показывает что невозможно запустить это приложение на вашем пк.
Ответы (2 шт):
Ну и что вы хотите?
- Вы пишете в текстовый файл, так что, например,
0x0Aпревратится в два байта -0x0A 0x0D. - Но это не так важно, потому что все равно вы пишете с использованием оператора
<<, так что в файле будут просто текстом записанные числа. - По названию судя, вы берете DLL и пытаетесь переписать ее в EXE. Мелочь по сравнению с 1 и 2, но тоже неприятно...
Вы бы хоть заглянули после записи внутрь файла, что у вас получилось. Или сравнить размеры исходного файла и получившегося.
Чтобы компилятор не вставлял лишние символы надо текстовый вывод переключить на двоичный примерно так:
std::fstream DllData_s("test.exe", std::ios::in | std::ios::out | std::ios::app | std::ios::binary);
Ну а вывод файла лучше сделать через fstream.write(char *ptr, int size) примерно так:
DllData_s.write(&DllData[0], sizeof(DllData));
Но если вы динамическую библиотеку пытаетесь запустит, как исполнимый файл - из этого толку не будет. Её надо подключать к приложению, а это отдельная история.