Was heißt für dich "in deinem Prozess"? Wenn du Zugriff auf globale Variablen brauchst, würde ich SendMessage nehmen. Alles andere wird sehr unschön. Wenn es dir nur darum geht, denn Code aus deinem Prozess zu holen, kannst du ihn ja einfach mit VirtualAllocEx und WriteProcessMemory hinüberschieben und dann diesen Funktionszeiger verwenden. Das Problem mit GetModuleHandle und GetProcAddress löst du z.B. folgendermaßen:
Delphi-Quellcode:
//nicht getestet
procedure AsmHelper(
{Parameters});
stdcall;
asm
call @@Ahead
@@GetProcAddr:
dd 0
@@GetModH:
dd 0
@Ahead:
pop eax
pop edx
push [eax + 4]
push [eax]
push edx
jmp RealProc
end;
procedure RealProc(GetProcAddr, GetModH: Pointer
{; Parameters});
stdcall;
begin
end;
Dann musst du nur noch ein weiteres WriteProcessMemory verwenden, um die Adressen in AsmHelper einzufügen. Der Sprung am Ende müsste funktionieren, wenn du beide Routinen in einem Block belässt.