Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Hooks - außerhalb des Prozessspeichers möglich?

  Alt 14. Aug 2008, 20:29
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat