第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在delphi中打補丁例程調(diào)用

在delphi中打補丁例程調(diào)用

侃侃無極 2019-11-30 14:07:08
我想修補例行調(diào)用,以便自己進行一些修改即可處理它。我正在寫一個資源加載器。我想用我的來修補Delphi的LoadResourceModule和InitInheritedComponent例程。我已經(jīng)檢查了MadExcept.pas單元中的PatchAPI調(diào)用,但無法確定是否可以將其用于我的項目。我想要類似的東西我的exe在運行時調(diào)用-> LoadResourceModule->跳至-> MyCustomResourceModule ...關于此的任何指示將非常有幫助。
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

我使用以下代碼:


procedure PatchCode(Address: Pointer; const NewCode; Size: Integer);

var

  OldProtect: DWORD;

begin

  if VirtualProtect(Address, Size, PAGE_EXECUTE_READWRITE, OldProtect) then 

  begin

    Move(NewCode, Address^, Size);

    FlushInstructionCache(GetCurrentProcess, Address, Size);

    VirtualProtect(Address, Size, OldProtect, @OldProtect);

  end;

end;


type

  PInstruction = ^TInstruction;

  TInstruction = packed record

    Opcode: Byte;

    Offset: Integer;

  end;


procedure RedirectProcedure(OldAddress, NewAddress: Pointer);

var

  NewCode: TInstruction;

begin

  NewCode.Opcode := $E9;//jump relative

  NewCode.Offset := NativeInt(NewAddress)-NativeInt(OldAddress)-SizeOf(NewCode);

  PatchCode(OldAddress, NewCode, SizeOf(NewCode));

end;

您可以通過調(diào)用來實現(xiàn)鉤子/補丁/繞行RedirectProcedure:


RedirectProcedure(@LoadResourceModule, @MyLoadResourceModule);

這將適用于32位代碼。如果舊功能和新功能都位于同一可執(zhí)行模塊中,則它也適用于64位代碼。否則,跳轉距離可能會超出32位整數(shù)的范圍。


如果有人可以提供一種適用于64位地址


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 684 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號