Ich weiss ja nicht genau, was PaddyL da genau machen wollte.
Zum Beispiel holt er sich die Base des eigenen MainModules und Freed diesen Addressbereich im fremden Prozess ohne zu wissen was sich dort befindet. Hää
Die Idee ist, die Funktion in den gleichen Addressbereich zu stopfen um nicht relocaten zu müssen.
Dass das funktionieren wird, ist aber sehr vage. Eigentlich muss man sogar viel Glück haben, dass es klappt.
http://msdn2.microsoft.com/en-us/library/aa366890.aspx

Zitat von
MSDN:
VirtualAllocEx Function
[...]
lpAddress
The pointer that specifies a desired starting address for the region of pages that you want to allocate.
If you are reserving memory, the function rounds this address down to the nearest multiple of the allocation granularity.
If you are committing memory that is already reserved, the function rounds this address down to the nearest page boundary.
[...]
Dann quetsch er dort das gesamte MainModule rein. Warum eigentlich?
Insgesamt also eigentlich eine sehr unsichere Methode.
Besser ist es, die beiden Addressen der Funktionen GetProcAddress und LoadLibraryA mit rüberzukopieren.
Dann ist man unabhängig.

Natürlich darf man dann nicht auf globals zugreifen oder die
RTL. Man beginnt in diesem Thread sozusagen von 0 mit GetProcAddres und LoadLibrary