ezini Ответов: 3

Как я могу создать полностью работающий exe-файл с помощью fstream , C++


У меня есть консольная программа, которая должна создать еще один exe-файл и после этого запустить его .
Проблема в том, что я понятия не имею, как это сделать, используя fstream

Что я уже пробовал:

Я знаю, как создать другой тип файла (например, файлы документов), но понятия не имею, как создать exe-файл таким образом.

3 Ответов

Рейтинг:
1

OriginalGriff

fstream это не проблема: передайте ему массив байтов и путь, и скажите toi, чтобы он их записал.

Ваша проблема - это исполняемая часть его.

Создать exe-файл несложно: это очень простой формат файла. Но... то, что он содержит, - это инструкции машинного кода в двоичном формате, и чтобы создать их с нуля, вы должны знать машинный код (и довольно хорошо), а затем написать код, чтобы сгенерировать правильный машинный код для выполнения любой функции, которую должен выполнять ваш EXE-файл при запуске. И с нуля это решительно нетривиально, поскольку у вас нет доступа к библиотечным функциям, а это значит, что вам нужно создать ту часть EXE, которую вы пишете, и в нужном месте в файле (с точки зрения внутренней памяти).

Тогда вы должны запустить его. Это тривиально: google скажет вам об этом.

Захочу ли я это сделать? Нет. И у меня есть достаточный опыт в подобных вещах за те десятилетия, что я занимаюсь этим. Из этого и вашего предыдущего вопроса Вы не говорите, что у вас есть где-то рядом с уровнем навыков и знаний, которые вам понадобятся, чтобы сделать это без большого количества времени и разочарования.

Я не знаю, что именно вы пытаетесь сделать, но я почти уверен, что вы идете не в ту сторону, или пытаетесь бежать, прежде чем вы сможете ходить!


Рейтинг:
0

CPallini

Рабочий пример (скомпилируйте его с вашим любимым компилятором/IDE, чтобы получить исполняемый файл):

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  const string Filename{"out.txt"};
  {
    ofstream ofs{Filename};

    ofs << "hi there" << endl;
  }

  ifstream ifs(Filename);

  while (ifs)
  {
    string line;
    getline(ifs, line);
    cout << line << endl;
  }
}


Рейтинг:
0

KarstenK

Пожалуйста, повторите свою задачу, потому что это звучит немного глупо. Вы можете использовать CopyFile для копирования какого-либо файла или использовать DownloadFile для загрузки какого-либо файла с какого-либо веб-сервера.

При выполнении exe-файла, чем заботиться о правильном рабочем каталоге и правах доступа, как описано в эта статья.