Можно ли как-то при компиляции ехе файла "внутрь" него добавить еще exe файл?

Да, в C++ есть способ внедрить один исполняемый файл в другой при компиляции, хотя это может быть сложной и необычной задачей.

Самый простой способ внедрить второй исполняемый файл в первый - это объединить два файла в один. Для этого необходимо открыть оба файла (исходный и добавляемый), прочитать содержимое в память и записать его в единый исполняемый файл. Очень важно прочитать бинарные файлы в двоичном режиме, чтобы не повредить данные.

Ниже приведен пример, в котором добавляется файл called.exe в main.exe:

#include <iostream>
#include <fstream>

int main() {
    std::ifstream inMain("main.exe", std::ios::binary); // открываем исполняемый файл main.exe в двоичном режиме
    std::ifstream inCalled("called.exe", std::ios::binary); // открываем исполняемый файл called.exe в двоичном режиме
    std::ofstream out("combined.exe", std::ios::binary); // создаем новый исполняемый файл combined.exe

    // проверяем, что файлы успешно открыты
    if (!inMain || !inCalled || !out) {
        std::cerr << "Failed to open files.";
        return 1;
    }

    // считываем содержимое main.exe и записываем в combined.exe
    out << inMain.rdbuf();

    // считываем содержимое called.exe и добавляем в combined.exe
    out << inCalled.rdbuf();

    // закрываем файлы
    inMain.close();
    inCalled.close();
    out.close();

    std::cout << "Files combined successfully.";

    return 0;
}

Этот код открывает main.exe и called.exe в двоичном режиме, считывает содержимое main.exe и записывает его в новый исполняемый файл combined.exe. Затем он считывает содержимое called.exe и добавляет его в combined.exe. В конце все файлы закрываются, и выводится сообщение об успешном объединении.

Однако следует отметить, что встраивание одного исполняемого файла в другой требует осторожного обращения и четкого понимания того, что делает каждый из файлов. Также стоит учитывать, что размер объединенного файла будет равен сумме размеров исходных файлов.

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

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