Napisz to w C, będzie łatwiej o ile czujesz się na siłach. Zacznij od
int main(int argc, char* argv[])
argv[1] to namiar na gcc.exe
argv[2] aż do argv[argc-1] to parametry przekazane do gcc. Jeden z nich to namiar pliku .cpp który musisz zmodyfikować. Upraszczając szukanie możesz sprawdzić czy argv[x] kończy się na ."cpp", w końcu to ma być na własny użytek.
Gdy już znajdziesz parametr z namiarem na .cpp, wczytaj plik do pamięci i skocz do funkcji tokenizującej która albo stworzy jednokierunkową listę stringów (tokenów zaczynających się od cudzysłowia) albo lepiej dla każdego stringa wywoła funkcję która podmieni znaki w znalezionym stringu. Parsując tekst musisz pomijać komentarze // (\n przerywa jeżeli ostatni znak nie był ukośnikiem) oraz /* */, a szukając końca stringu musisz pomijać \".
Gdy już wprowadzisz poprawki, zapisz plik pod tą samą nazwą (uprzednio kopiując oryginał) a następnie uruchom gcc funkcją CreateProcess. Linię poleceń zwróci funkcja PathGetArgs(GetCommandLine()), ale równie dobrze możesz jeszcze raz przelecieć całe argv[] pomijając pierwszą pozycję, zapisując sumę stringów w odpowiednio dużym buforze. Jeżeli użyjesz PathGetArgs, to zapisz wskaźnik w zmiennej i pomiń ewentualne spacje na początku. Zazwyczaj jest jedna.
Teraz aby uruchamiając gcc nie uruchomić siebie samego, musisz albo usunąć wartość debugger z rejestru, albo użyć flagi DEBUG_PROCESS w funkcji CreateProcess. Wszystkie inne parametry dla CreateProcess ustaw domyślne - zazwyczaj NULL. Jeżeli zdecydujesz się na debugowanie to skocz do funkcji implementującej standardową pętlę debuggera - WaitForDebugEvent w pętli; EXIT_PROCESS_DEBUG_EVENT będzie oznaczało że gcc zrobił swoje.
Jeżeli jednak zdecydujesz się nie debugować tylko usuniesz wartość debugger z rejestru, to zaczekaj aż gcc zrobi swoje funkcją WaitForSingleObject.
Na koniec przywróć oryginalny plik .cpp, oraz przywróć wartość debugger w rejestrze jeżeli ją usunąłeś.
* Niektóre programy widząc że są debugowane robią niespodzianki (breakpointy), wtedy warto ukryć debugger pewną sprytną funkcją.
Mała uwaga co do lokalizacji w rejestrze. Nie gwarantuję, ale powinno zadziałać też w HKEY_CURRENT_USER - nigdy nie sprawdzałem.