![]() |
debugging erkennen
Wie kann ich zúverlässig erkennen, ob ein Debugger läuft?
Ich habe dazu folgenden Text gefunden: Zitat:
|
Re: debugging erkennen
Zitat:
|
Re: debugging erkennen
Es gibt etliche Möglichkeiten einen Debugger zu verstecken...
Die API-Funktion IsDebuggerPresent() sollte für einfache Prüfungen reichen (alles andere artet in Arbeit aus). .nico ps: die Funktion dynamisch zu binden ist keine schlechte Idee, da es sie erst ab Win98 gibt. |
Re: debugging erkennen
Danke für den Tip ;)
Ich habe es jetzt wie folgt implementiert:
Delphi-Quellcode:
P.S. Ich habe nun den Tip von NicoDE berücksichtigt ;)
function IsDebuggerPresent: boolean;
type TIsDebuggerPresent = function: boolean; stdcall; var lib: Cardinal; IsDebuggerPresent: TIsDebuggerPresent; DebuggerFound: boolean; begin //IsDebuggerPresent aus Kernel32... lib := LoadLibrary(kernel32); if (lib <> INVALID_HANDLE_VALUE) and (lib <> 0) then begin IsDebuggerPresent := GetProcAddress(lib, 'IsDebuggerPresent'); if Assigned(IsDebuggerPresent) then Result := IsDebuggerPresent else Result := False; end else Result := False; end; |
Re: debugging erkennen
Zitat:
Zitat:
.nico ps: FreeLibrary vergessen ;) |
Re: debugging erkennen
Zitat:
|
Re: debugging erkennen
Zitat:
|
Re: debugging erkennen
Zitat:
|
Re: debugging erkennen
Davon ausgehen kann man eben nicht, da es ja immernoch Leute mit Win95 geben soll die eine Fehlermeldung bekämen weil es dort diese Funktion nicht gibt :wink: ...
|
Re: debugging erkennen
Zitat:
OK, deutlicher... Dein Code macht das, was Du willst (aber nur, weil es eine Funktionsvariable ist...)
Code:
Das ist eigentlich inkonsistent, da ein Funktionszeiger auch nur ein Pointer ist (somit kann @Foo zu Missverständnissen führen - ist jetzt die Adresse der Variablen oder der Inhalt gemeint).
function Foo(): Boolean;
var Bar: procedure(); begin Bar := nil; Result := (@Bar <> nil); end; function Bar(): Boolean; var Foo: Pointer; begin Foo := nil; Result := (@Foo <> nil); end; procedure TForm1.Button1Click(Sender: TObject); begin if Foo() then ShowMessage('foo'); if Bar() then ShowMessage('bar'); end; .nico |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz