Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sinnlose Zeichenketten etc. im Quellcode erlaubt (https://www.delphipraxis.net/112371-sinnlose-zeichenketten-etc-im-quellcode-erlaubt.html)

Namenloser 19. Apr 2008 21:35


Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Hallo, Community!

Mir ist schon vor einigen Jahren aufgefallen, dass soetwas kompilierbar ist:
Delphi-Quellcode:
begin
  showmessage('sinnvoller text');
  'sinnloser text';
  123; // sinnlose zahl
end;
Das interessante ist, dass der sinnlose Text sogar hinterher in der EXE auftaucht (lässt sich mit einem Hexeditor finden). Das ist ja nun weder etwas nerviges, noch etwas, das einen Fehler produziert. Allerdings würde mich mal interessieren, wieso das eine gültige Syntax zu sein scheint. Ist das ein Bug? Oder ein Feature? Auf jeden Fall ging das bei Delphi 3 noch nicht. Und dass es keinen fehler gibt, deutet ja darauf hin, dass es kein Bug sein kann. Nur, was bringt es dann?

Das einzige, was mir einfiele, wäre, Zeichenketten zur Verwirrung von Crackern einzubauen. Davon hab ich mal irgendwo was gelesen, z.B. baut man an einer willkürlichen Stelle im Code 'Unregistriert' ein, wenn das z.B. bei einem unregistrierten Programm in der Titelzeile steht. Die wirkliche Meldung in der Titelzeile baut man dann aber "soft" zusammen, also mit chr(...)+chr(...) etc. Der Hacker denkt dann, er hätte die Stelle gefunden, in der die Registrierung überprüft wird. Allerdings müsste vor dem String ja ein Sprungbefehl oder ähnliches stehen, damit es zu keinem Fehler kommt, was aber eigentlich auffallen müsste.

Kann mir vielleicht jemand sagen, was es damit auf sich hat?

Dax 19. Apr 2008 21:38

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Delphi hat vermutlich eine Syntax/Semantik, die alleinstehende Werte erlaubt. Parameterlose Funktionen, deren Wert nicht benutzt wird, fallen unter eine solche Semantik. Eventuell wurde das mit der Zeit auch auf Primitive ausgedehnt oder einfach direkt in die Syntax aufgenommen..?

DeddyH 19. Apr 2008 21:42

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Ich vermute, diese sinnlosen Werte werden einfach als Konstanten angesehen, mit denen nicht weiter geschieht.

Muetze1 19. Apr 2008 21:58

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von NamenLozer
Mir ist schon vor einigen Jahren aufgefallen, dass soetwas kompilierbar ist:

Nur wieviele Jahre? Diese Möglichkeiten kamen erst, nach dem Borland/CodeGear zu D2005 den Parser der Sprache erweitert bzw. z.T. wohl neu geschrieben hatte.

Im Anhang sind die Beschwerden von Delphi 5 zu dem Code...

/EDIT: Delphi 7 beschwert sich mit den gleichen Meldungen im gleichen Stil...

Namenloser 19. Apr 2008 22:24

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Vor einigen Jahren war glaube ich mit Delphi 2005.

grenzgaenger 19. Apr 2008 23:31

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Tja, unter D2006, kommt folgende Meldung...

Wie erwartet... GG

Namenloser 20. Apr 2008 00:02

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Fehler:
Delphi-Quellcode:
begin
  writeln('sinnvoller text');
  'sinnloser text'; <--
  123;
end.
Fehler:
Delphi-Quellcode:
begin
  'sinnloser text';
  123; <--
end.
Kein Fehler:
Delphi-Quellcode:
begin
  'sinnloser text';
end.
Merkwürdig :gruebel:
Und ich meine (kanns jetzt nicht beschwören), unter Delphi2005 wären die ersten beides auch noch gegangen.

Muetze1 20. Apr 2008 01:32

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Was anderes witziges. Da ich kein Delphi 6 habe, kann ich nicht sagen, wie sich dies Delphi dazwischen verhält.

Folgende Procedure:
Delphi-Quellcode:
procedure Foo(const ABar1: integer = -1; const ABar2: integer = -1; const ABar3: integer = -1; const ABar4: integer = -1);
begin
  ;
end;
Aufruf in Delphi 5, welcher compiliert wird und keine Warnung, Hinweis etc bringt:
Delphi-Quellcode:
Foo(1,2,);
(Ja, das Komma am Ende ist der Witz und richtig so)

Aber in Delphi 7 meckert er dies dann an, richtigerweise wie man bemerken muss...

Namenloser 20. Apr 2008 01:34

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Ich glaube, das wurde sogar schonmal als Bugreport gepostet.
Der Parser hat auch noch ein paar andere Merkwürdigkeiten, die mir gelegentlich auffallen, mir aber gerade nicht einfallen...

Hansa 20. Apr 2008 01:46

Re: Sinnlose Zeichenketten etc. im Quellcode erlaubt
 
Scheint ein Feature von Turbo-Delphi zu sein. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 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