Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 全局Hook-in-WriteProcessMemory函数_Delphi - Fatal编程技术网

Delphi 全局Hook-in-WriteProcessMemory函数

Delphi 全局Hook-in-WriteProcessMemory函数,delphi,Delphi,我想知道如何绕道函数,例如WriteProcessMemory 作为WriteProcessMemory监视器: 您需要创建一个D-Tour 您需要这样的记录: unit PatchU; interface type TPatchMethod = record private type pPatchEvent = ^TPatchEvent; // "Asm" opcode hack to patch an existing routine TPatchEv

我想知道如何绕道函数,例如WriteProcessMemory

作为WriteProcessMemory监视器:


您需要创建一个D-Tour

您需要这样的记录:

unit PatchU;

interface

type
  TPatchMethod = record
  private type
    pPatchEvent = ^TPatchEvent;

    // "Asm" opcode hack to patch an existing routine
    TPatchEvent = packed record
      Jump: Byte;
      Offset: Integer;
    end;

  var
    PatchedMethod, OriginalMethod: TPatchEvent;
    PatchPositionMethod: pPatchEvent;
  public
    constructor Create(const aSource, aDestination: Pointer);
    procedure Restore;
    procedure Hook;
  end;

implementation

uses
  Windows, Sysutils;

{ TPatchMethod }

constructor TPatchMethod.Create(const aSource, aDestination: Pointer);
var
  OldProtect: Cardinal;
begin
  PatchPositionMethod := pPatchEvent(aSource);
  OriginalMethod := PatchPositionMethod^;
  PatchedMethod.Jump := $E9;
  PatchedMethod.Offset := PByte(aDestination) - PByte(PatchPositionMethod) - SizeOf(TPatchEvent);

  if not VirtualProtect(PatchPositionMethod, SizeOf(TPatchEvent), PAGE_EXECUTE_READWRITE, OldProtect) then
    RaiseLastOSError;

  Hook;
end;


procedure TPatchMethod.Hook;
begin
  PatchPositionMethod^ := PatchedMethod;
end;

procedure TPatchMethod.Restore;
begin
  PatchPositionMethod^ := OriginalMethod;
end;

end.
然后使用它:

var
  TcxLabel_Patch: TPatchMethod;


在本例中,我钩住了tcxalbel的构造函数。但你可以勾住一切

挂接API调用需要绕道而行。与WHU键盘无关。这个问题需要更清楚一些。对不起,我的英语说得不流利。我需要在WriteProcessMemory函数上做一个全局钩子,我想知道SetWindowsHookEx是否可以?不可以。你需要绕道。你能告诉我一个函数可以做到这一点吗?如果你在评论中问这个问题,就不会。请阅读并编辑问题,询问您真正想要回答的问题。Asker希望此挂钩适用于我认为的所有进程。据我所知,您只能将此D-tour取消为您自己的进程。可以在其他进程中绕过API调用processes@JensBorrisholt谢谢你的回复,但这是一个全球挂钩,我想做什么。我为我给帖子带来的麻烦道歉。@SCOFIELD您似乎不愿意学习如何使用此网站。问题还不清楚。请你可以编辑它,使它清楚地表明你在寻找什么。
type
  THooked_cxLabel = class(TcxLabel)
    constructor HookedCreate(AOwner: TComponent);
  end;
  THooked_cxImage = class(TcxImage)
    constructor HookedCreate(AOwner: TComponent);
  end;

constructor THooked_cxLabel.HookedCreate(AOwner: TComponent);
begin
  TcxLabel_Patch.Restore;
  try
    Create(AOwner);
    Transparent := True;
  finally
    TcxLabel_Patch.Hook;
  end;
end;
initialization
  TcxLabel_Patch := TPatchMethod.Create(@TcxLabel.Create, @THooked_cxLabel.HookedCreate);
finalization
end.