2012-06-21 19 views
7

Bir 'kilitlenme' testi için, işletim sisteminin olay günlüğündeki DEP ihlali kaydını nasıl günlüğe kaydettiğini görmek için küçük bir Delphi kodu parçasına ihtiyacım var.Delphi için Basit Veri Yürütme Engellemesi örnek kodu

DEP'yi etkinleştirme konusunda pek çok kaynak buldum, ancak DEP ihlalinin nasıl tetikleneceği ile ilgili değil.

Bir örneğiniz var mı?


İlgili soru: Oluşturulan yürütülebilir, içinde

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

bir DEP vialotion günlüğüne Bu kod işi alır

cevap

10

gibi görünmelidir nasıl gösterir X'un depolandığı yer veri olarak değerlendirilir. Bir alternatif olarak yığını üzerinde bulunan kod yürütme deneyebilirsiniz: Bu zam erişim ihlali istisnalar

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

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

İkisi DEP etkinken.

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; 
: Eğer DEP bu isteğe bir 32 bit işleminden örneğin aktif olduğundan emin olmak gerekirse

, bu işlevi çağırmak