2012-06-21 5 views
7

테스트 '크래시'의 경우 운영 체제가 DEP 위반 사항을 이벤트 로그에 기록하는 방법을 보려면 작은 델피 코드가 필요합니다.델파이의 간단한 데이터 실행 방지 예제 코드

DEP 활성화와 관련된 많은 출처를 발견했지만 DEP 위반을 '트리거하는'방법에 관한 정보는 없습니다.

예가 있습니까?


관련 질문 : 생성 된 실행 파일의에서

procedure DoJump(Address: Pointer); 
asm 
    JMP Address 
end; 

const 
    X: Byte=$C3;//RET op code 

procedure TriggerDEP; 
begin 
    DoJump(@X); 
end; 

: https://serverfault.com/questions/130716/if-dep-has-stopped-an-app-is-there-a-possibility-to-see-this-events-in-a-log

는 DEP vialotion 로그이 코드가 수행 할 작업을 얻을 수

답변

10

에 같이하는 방법을 보여줍니다 X이 저장된 위치가 데이터로 처리됩니다. 다른 방법으로 당신은 스택에있는 코드를 실행 시도 할 수 이러한 인상 액세스 위반 예외

procedure DoJump(Address: Pointer); 
asm 
    JMP Address 
end; 

procedure TriggerDEP; 
var 
    X: Byte; 
begin 
    X := $C3; 
    DoJump(@X); 
end; 

모두를 DEP가 활성화 될 때.

procedure EnableDEP; 
const 
    PROCESS_DEP_ENABLE: DWORD=$00000001; 
var 
    SetProcessDEPPolicy: function(dwFlags: DWORD): BOOL; stdcall; 
begin 
    SetProcessDEPPolicy := GetProcAddress(GetModuleHandle(kernel32), 'SetProcessDEPPolicy'); 
    if Assigned(SetProcessDEPPolicy) then begin 
    SetProcessDEPPolicy(PROCESS_DEP_ENABLE); 
    end; 
end; 
: 당신이 DEP는 선택 사항입니다 32 비트 프로세스에서, 예를 들어, 활성화되어 있는지 확인해야하는 경우

,이 함수를 호출