Mir fallen da spontan drei Möglichkeiten ein:
1. Mit ReadProcessMemory die gesamte Funktion ins eigene Programm transferieren. Das ist allerdings ziemlich nutzlos, falls andere Funktionen oder globale Variablen verwendet werden. Außerdem müsstest du irgendwoher wissen, wie lang die Funktion ist. Diese Methode halte ich daher nicht für praktikabel.
2. CreateRemoteThread ist mir persönlich in diesem Fall sehr sympathisch: Sofern du nur einen Parameter hast und die Aufrufkonvention stdcall ist, kannst du direkt CreateRemoteThread aufrufen und als Thread-Funktion die gewünschte angeben, das Ergebnis solltest du mit GetExitCodeThread erhalten. Wenn es doch mehr Parameter sein sollten, gibt es auch eine andere Möglichkeit:Einfach mit VirtualAllocEx ein bisschen Speicher allozieren und dort Code reinschreiben, der dann die Funktion aufruft. Ergebnis-Transfer ganz nach Wahl: Über den Exit-Code oder irgendeine Form von
IPC.
3. Die absolute Hacker-Methode, die aber höchstwahrscheinlich nicht funktioniert: Die Exporttabelle des fremden Programms so ändern, dass sie die Funktion exportiert und die Anwendung dann als
DLL laden, das muss dann dynamisch und in einem Thread geschehen, weil du sonst nichts tun kannst. Ich habe allerdings keine Ahnung, was die Anwendung dazu sagt, als
DLL gestartet zu werden.