Возможно ли изменить исполняемый файл в процессе выполнения*?
Unix-way: в исполняемом файле - только исполняемый код, он при запуске читается в память, после этого файл свободен и с ним можно делать все, что позволяет твой доступ.
Windows-way: в исполняемом файле может быть навалено три короба ресурсов, вплоть до вырожденных случаев вроде самораспаковывающегося архива, когда код - это просто небольшая вставка в гигантский исполняемый файлище. Так что в память читается только код, но при этом предполагается, что он может подтягивать из файла ресурсы, когда они понадобятся. Поэтому файл блокируется на запись до тех пор, пока этот код не закончит выполнение.
Из того что приходит на ум только костыль аля открыть ofstream переписать им файл, натравить на него через system компилятор и за тем перезапустить программу через exec из скомпилированного файла. Да это можно было бы сделать, но это бред. Менять C/C++ код в рантайме всё равно что юзать микроскоп для забивания гвоздей. Проще было бы подключить V8 и в рантайме менять JavaScript он так из коробки умеет вродебы.

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

Так же есть вариант для совсем уж отбитых: писать в исполняемый файл через ofstream машинный код(предварительно скопировав сам исполняемый на системах семейства Windows) и перезапускаться exec'ом, но тут более чем дофига причин так не делать - как минимум будет больно и страшно.