AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Luckies "myIsDebuggerPresent" liefert immer true
Thema durchsuchen
Ansicht
Themen-Optionen

Luckies "myIsDebuggerPresent" liefert immer true

Ein Thema von TheMiller · begonnen am 6. Apr 2010 · letzter Beitrag vom 9. Apr 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Luckies "myIsDebuggerPresent" liefert immer true

  Alt 6. Apr 2010, 12:35
Hallo,

ich möchte mich ein bissl mit AntiCracking beschäftigen. Habe jetzt Luckies "AntiCracking"-Artikel gelesen und - weil ich keine Ahnung von ASM habe - voerst einfach per Copy&Paste ins Projekt eingefügt. Beim Programmstart lasse ich mir das Ergebnis anzeigen und erhalte aber immer true - auch außerhalb von der IDE. Was mache ich falsch?

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;

procedure TForm1.FormCreate(Sender: TObject);
var
  ...
begin
  ...

  if (myIsDebuggerPresent) then
    ShowMessage('Ja');

  ...
end;
Ich habe sogar Delphi geschlossen und ich bekomme trotzdem "ja" angezeigt. Vielleicht könnt ihr mir helfen!

Danke im Voraus
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 12:40
Hi,

liefert AX nicht den Rückgabewert einer boolschen Funktion ?

Dann ist push eax - pop eax kontraproduktiv und restauriert eax anstatt das Ergebnis zu liefern.

Vielleicht fehlt da noch ne Zeile, die IsBeingDebugged in AX lädt?

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 12:42
Ehm...okay...

ich kann echt KEIN asm... garkein bissl... Könntest du mir unter die Arme greigen? Das wäre nett...
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 12:44
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;

procedure TForm1.FormCreate(Sender: TObject);
var
  ...
begin
  ...

  if (myIsDebuggerPresent) then
    ShowMessage('Ja');

  ...
end;
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 12:48
Hallo,

danke - aber ich erhalte auf die Weise das gleiche Verhalten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#6

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 12:49
POP EAX würde das Result (welches ja in EAX liegt) überschreiben.


Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean;
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
  end;
  Result := BeingDebugged;
end;

Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
asm
  push ebx
  mov eax, fs:[$18]
  mov ebx, [eax+$30]
  mov eax, [ebx+2]
  pop ebx
end;
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
asm
  mov eax, fs:[$18]
  mov edx, [eax+$30]
  mov eax, [edx+2]
end;

function MyIsDebuggerPresent: Boolean; assembler;
asm
  mov eax, fs:[$18]
  mov eax, [eax+$30]
  mov eax, [eax+2]
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 12:55
Hi.

Das mit dem "Result" hat funktioniert. Er liefert jetzt die richtigen Ergebnisse. Aber warum hast du noch drei verschiedene Codeblöcke eingebaut? Kannst du dazu noch was sagen?
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:04
die 3 anderen Code-Blöcke sind im Grunde nur Alternativen zu der ersten Funktion. Sie liefern alle exakt das gleiche Ergebnis, nur wird das Ergebnis immer etwas verschieden berechnet.
In der 1. Alternative wird das Ergebnis in ebx berechnet und dann nach eax verschoben und ebx aus dem Stack entfernt.
In der 2. Alternative wird das Ergebnis in edx berechnet und dann nach eax verschoben.
In der 3. Alternative wird das Ergebnis gleich in eax berechnet.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#9

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:12
Ah okay.

Vielen Dank. Ist irgendeine Methode zu bevorzugen, oder ist es im Grunde egal?
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#10

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:16
kommt ganz darauf an, wie du das machen willst. Wenn es etwas unsichtbarer sein sollte, würde ich keine Funktion benutzen, sondern das ganze in der Aufruf-Prozedur machen. Ansonsten sind die 4 gleichwertig.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz