Nein, der Code ist ursprünglich von Oliver.
@DJ-SPM: Wenn du schon nur kopierst, dann bitte auch richtig. Dein Code:
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean;
assembler;
var
BeingDebugged: Boolean;
begin
asm
push eax;
push ebx;
mov eax, fs:[$18];
mov ebx, [eax+$30];
mov eax, [ebx+2];
mov [BeingDebugged], al;
pop ebx;
pop eax;
// Wichtig! POP immer in umgekehrter Reihenfolge von PUSH
end;
end;
Mein Code:
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean;
assembler;
asm
mov eax, fs:[$18];
mov eax, [eax+$30];
movzx eax, byte ptr [eax+2];
end;
Du hast da alles durcheinander geworfen, was man durcheinander werfen kann. Bei dir wird das Ergebnis in der Variablen
BeingDebugged abgelegt. Da sie aber lokal ist, ist deren Inhalt nach Verlassen der Funktion ungültig.
Die globale Variable
BeingDebvuggt wird nur benötigt, wenn man den
ASM-Code nicht in eine Funktion packt, sondern "nackt" in den Code kopiert, damit man keine verdächtigen Funktionsaufrufe hat.
Also lese den Artikel noch mal sorgfältig.