일부 수정을 통해 직접 처리 할 수 있도록 루틴 호출을 패치하고 싶습니다. 리소스 로더를 작성 중입니다. Delphi의 LoadResourceModule과 InitInheritedComponent 루틴을 내 패치로 패치하고 싶습니다. 내가 MadEcept.pas 단위에서 PatchAPI 호출을 확인했지만 내 프로젝트에 사용할 수 있다면 그것을 알아낼 수 없습니다. 이에델파이에 패치 루틴 호출
모든 포인터는 매우 도움이 될 것입니다 ...> MyCustomResourceModule -> LoadResourceModule - -> 점프에
나는 런타임 통화에서
내 EXE 같은 것을 원한다.
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;
당신은
RedirectProcedure
를 호출하여 후크/패치/우회를 구현하는 것이 :RedirectProcedure(@LoadResourceModule, @MyLoadResourceModule);
이 32 비트 코드를 작동
이이 질문을 확인 detour''라고 [외부에서 선언 된 함수의 구현 (우회)를 변경하는 방법 (http://stackoverflow.com/questions/6905287/ 구현 방법 - 외부에서 선언 된 기능의 우회 방법) – RRUZ
방금 같은 생각을하고있었습니다. 따라서이 기술을 사용하면 구성 요소 스트리밍에 코드를 추가 할 수 있습니다 (DFM에서 코드 추가). 응용 프로그램) 메커니즘에? 따라서 예를 들어, 중고 컴포넌트 클래스를 로깅하거나 품질 보증 (BDE 클래스를 사용하지 마십시오! 또는 컴포넌트 X의 이전 버전)을 사용할 수 있습니다. – mjn
@mjn 더 쉽게 수행 할 수있는 다른 확장 점이 있습니다. 예 :'TReader.OnFindComponentClass'. 패치 코드는 다른 사람이 작업을 완료 할 수 없을 때 항상 최후의 수단이어야합니다. –