Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dynamische Arrays (https://www.delphipraxis.net/21746-dynamische-arrays.html)

Mr.M 7. Mai 2004 15:05


dynamische Arrays
 
Hi,

ist nur eine kleine winzige Frage:

Warum kann ich bei nullbasierte dynamischen Arrays, die zum Beispiel mit SetLength(Array, 2) dimensionalisiert sind, auch auf eine höhere Dimension etwas zuweisen und zugreifen.
Z.B. : Array[10] := 5; ShowMessage(array[10]);

Ich dachte man könne nur von 0 bis der angegebenen Länge -1 zugreifen. Kann mir das einer erklären?

Muetze1 7. Mai 2004 15:09

Re: dynamische Arrays
 
Moin!

Kannst du auch nur, du überschreibst mit der Wertzuweisung den folgenden Speicher und der liegt noch in deinem Datenbereich, daher hast du keine Probleme. Wenn du aber mal unter Projekt->Optionen->Compiler die Bereichsprüfung einschaltest, dann meckert er dich auch an.

Ansonsten zur Verdeutlichung:
Delphi-Quellcode:
Var
  Arr : Array[0..3] Of Word;
  Word1,
  Word2 : Word;
Wenn du bei der Definition auf das Arr[4] was reinschreibst, dann wird dieses höchstwahrscheinlich danach in Word1 drinne stehen...

MfG
Muetze1

Matze 7. Mai 2004 15:13

Re: dynamische Arrays
 
Zitat:

Zitat von Muetze1
Ansonsten zur Verdeutlichung:

Das ist gut, jetzt hast du mich total verwirrt und muss dich auch mal was fragen. :mrgreen:

Zitat:

Zitat von Muetze1
Wenn du bei der Definition auf das Arr[4] was reinschreibst, dann wird dieses höchstwahrscheinlich danach in Word1 drinne stehen...

Warum ist das so?

Wieso gerade in Word1?

Kann es sein, dass ich Word1 einen Wert zuweise, aber dieser dann überschrieben wird, wenn ich auf die 4. Stelle des Arrays zugreife?

The-X 7. Mai 2004 15:24

Re: dynamische Arrays
 
wenn du arr[4] veränderst ja ;)

das Problem hatte ich auch mal, als ich eine falsche Größenangabe für ein Array in einem Test-Crypter hatte... nach dem Entschlüsseln kamen plötzlich gaanz andere Werte raus :roll: da Teile von anderen Variablen/Arrays durch diese Falschangabe verändert wurden...

[add]
eventuell könnte es sogar vorkommen, das du beim schreibenden Zugriff über die Array-Grenze hinaus Programmcode überschreibst (?) und damit einen BufferOverflow erzeugst wie er in vielen Sicherheitslücken benutzt wird (?)
[/add]
nich schlagen wenn ich falsch liege, aber ich hab das so in Erinnerung :angle2:

[edit]
Tepfihler beseitigt :mrgreen:
[/edit]

Mr.M 7. Mai 2004 15:40

Re: dynamische Arrays
 
Erstmal danke für die Antworten, ist sehr aufschlussreich. Das mit dem Buffer Overflow möchte ich aber gerne genauer wissen. Wäre nämlich interessant zu erfahren.

Matze 7. Mai 2004 15:45

Re: dynamische Arrays
 
Das würde mich auch interessieren.

Zitat:

Zitat von The-X
eventuell könnte es sogar vorkommen, das du beim schreibenden Zugriff über die Array-Grenze hinaus Programmcode überschreibst

Wie geht das, wenn der Programmcode in der exe gar nicht mehr so einfach, bzw. gar nicht mehr verändert werden kann. Oder kann man das noch in der exe "umprogrammieren"? :shock:

alcaeus 7. Mai 2004 15:46

Re: dynamische Arrays
 
Das Prinzip besteht darin, über die Grenzen eines Arrays hinaus in den Speicher zu schreiben. Damit kommst du unter Umständen in den Speicherbereich eines anderen Prozesses, bzw. in den Bereich wo der Code eines anderen Prozesses liegt. Springt der ProgramCounter des Prozesses nun an die neue Stelle, führt er deinen Code anstatt dem originalen aus. Wenn du das ganze dann ganz gezielt machst, kannst du diese "Fehler" in wichtigen Dateien erzeugen, und somit die Sicherheit eines System kompromittieren.
so glaube ich das Ganze verstanden zu haben, schlagt mich nicht wenns falsch ist

The-X 7. Mai 2004 15:53

Re: dynamische Arrays
 
genau so meinte ich das ;)

wenn kein "gültiger Code" an dieser Stelle steht, dann kommt es meist zum Absturz (ungewollt)...
aber durch gezieltes Ändern wird dann schadhafter Code ausgeführt, was zum Beispiel bei System-Prozessen fatale Folgen haben kann...

alcaeus 7. Mai 2004 15:56

Re: dynamische Arrays
 
Wenn M$ aber den Speicherschutz für Systemprogramme richtig implementieren würde, würde das ganze Problem nicht auftereten. Speicherschutz bedeutet, dass ich nur an meinen Speicherbereich rankomme und den anderen in Frieden lassen muss. Somit kann ich fremden Code nicht mehr überschreiben und 50% der aktuellen Viren wären mal außer Gefecht.

The-X 7. Mai 2004 15:59

Re: dynamische Arrays
 
Schon, aber dann bleibt trotzdem noch das Problem im lokalen Prozess,
was man ja zu hauf in Internet-Anwenungen findet indem man Fehlerhafte Daten an den Client/server sendet, diese nicht drauf klar kommen und abstürzen :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr.
Seite 1 von 2  1 2      

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