2012-02-15 1 views
0

메모리의 루틴 코드를 다른 위치로 복사하려고합니다. 예 :루틴 내용을 메모리의 다른 위치로 복사

procedure OldShowMessage; 
begin 
    ShowMessage('Old message..'); 
end; 

메모리의 다른 위치로 루틴을 복사한다고 말합니다. 나는 어떤 의사 코드가 난 그냥이 일을 어떤 가능성이 있는지 알고 싶은

// VirtualProtect(@OldShowMessage, <length of routine>, ..., ...); 
// Allocate memory 
// lopShowMessage := AllocMem(<length of routine>); 
// Move(@OldMessage, Pointer(lopShowMessage)^, <length of routine>); 
// FlushInstructioncache..... 

같은 것

var 
    lopShowMessage : procedure; // procedural pointer. 

같은 것을 선언했다. 새 루틴을 호출하는 루틴을 패치했지만 코드 우회로를 사용하여 JMP 명령을 배치했기 때문에 이전 루틴에서 제공된 기능을 사용할 수 없을 수도 있습니다.

내 앞의 질문에 대한 참조는 Detours이 실제로 작동하는 방법의 기술적 인 세부 사항에 읽을 경우, 당신은 당신의 일환으로 trampoline을 이용하여 기존의 일상적인 사용을 할 수 있음을 볼 수 here

답변

0

당신의 우회. 그런 다음 이전 루틴을 호출 할 때마다 트램펄린을 호출 할 수 있습니다.

+0

왜 이것을 다운 그레이드 했습니까? 그것은 유효한 대답입니다. –

관련 문제