AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)
Thema durchsuchen
Ansicht
Themen-Optionen

Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

Ein Thema von SneakyBagels · begonnen am 12. Mai 2017 · letzter Beitrag vom 13. Mai 2017
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
SneakyBagels
(Gast)

n/a Beiträge
 
#31

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 10:26
Antworten

1. diese beiden Schleifen stecken mitten im Execute-Block eines Threads
2. i ist lokal im Execute-Block deklariert, ein globales i gibt es nicht
3. Tokyo noch ohne Hotfix da mir die Zeit fehlt eine etwaige Fehlinstallation zu reparieren

Ohne TFile ist der Fehler weg. XE8 hat mit den 3 TFile's keine Probleme. Das 32 Bit-Kompilat auch nicht. Nur Tokyo mit 64 Bit meckert.

Zitat:
Das und die Tatsache, dass eine Änderung an anderer Stelle das Problem löst, spricht tatsächlich für ein Speicherproblem.
Liegt das dann an mir oder am Compiler/an Delphi? Denn wie gesagt gibt es unter XE8 keinerlei Probleme weder 32 och 64 Bit.
Mit Speicherproblem meinst du aber keine defekte Hardware?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#32

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 10:30
Nein, ich meine überschriebenen Speicher z.B., aber das heißt nicht, dass das an deinem eigenen Quelltext liegen muss. Es kann natürlich auch ein Fehler in der neuen Delphiversion sein. Die Wahrscheinlichkeit ist zwar nicht besonders hoch, aber möglich ist alles.

Ich schaue mir die Implementierungen einmal an.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#33

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 10:35
Ich habe gerade auch flott mal drüber geguckt. Es gibt zwar von XE8 zu Tokyo einige Änderungen (45 laut Anzeige) aber das meiste betrifft nur Linux.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#34

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 13:19
Definitiv ein Buffer-Overflow an irgendeiner anderen Stelle, der das Problem letztendlich verursacht. Viel Spaß beim Suchen Deine Operationen mit TFile sind hier auch nicht umbedingt der Auslöser - können natürlich aber.

Nur zur Sicherheit:
Als was hast du fileDate deklariert, welches du an die MSDN-Library durchsuchenGetFileAttributesEx API übergibst?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#35

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 13:31
Zitat:
Definitiv ein Buffer-Overflow an irgendeiner anderen Stelle, der das Problem letztendlich verursacht. Viel Spaß beim Suchen Deine Operationen mit TFile sind hier auch nicht umbedingt der Auslöser - können natürlich aber.
Nur hier wieder die Fragen...
1: warum ist der Fehler komplett weg sobald ich TFile 2x verwende statt 3x (oder halt gar nicht)
2: warum nur bei 64 Bit
3: und warum nicht bei XE8

fileDate ist als TWin32FileAttributeData deklariert.

Woran erkennt man einen BufferOverflow denn? Was muss man da falsch machen um den zu erzeugen.

Geändert von SneakyBagels (13. Mai 2017 um 13:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#36

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 14:06
Zitat:
Definitiv ein Buffer-Overflow an irgendeiner anderen Stelle, der das Problem letztendlich verursacht. Viel Spaß beim Suchen Deine Operationen mit TFile sind hier auch nicht umbedingt der Auslöser - können natürlich aber.
Nur hier wieder die Fragen...
1: warum ist der Fehler komplett weg sobald ich TFile 2x verwende statt 3x (oder halt gar nicht)
2: warum nur bei 64 Bit
3: und warum nicht bei XE8
Sobald IRGENDWO ein BufferOverflow stattfindet, ist der restliche Programmablauf komplett undeterministisch (zumindest erscheint es unserer beschränkten Wahrnehmung so). Das mit Logik erklären zu wollen, ist grundsätzlich zum Scheitern verurteilt.
1. Dadurch verschieben sich die Variablen auf dem Stack / der Stack wird kleiner / anderer Code wird generiert, wodurch dann letztendlich vielleicht eine andere Variable überschrieben wird und nicht dein Schleifen-Zähler oder List.Count . Kann man nur spekulieren.
2. Auch hier wird anderer Code generiert / bestimmte Datentypen (Pointer z.b.) sind auf einmal 8-Byte statt 4-Byte groß, wodurch sich die Position der lokalen Variablen auf dem Stack ebenfalls wieder verändert.
3. Kann man wieder nur spekulieren. Vermutlich wird der Code hier auf andere Weise generiert / optimiert, weshalb sich erneut die Position der Variablen auf dem Stack ändern könnte.

fileDate ist als TWin32FileAttributeData deklariert.
Gut, das scheint korrekt zu sein (sofern du den Typ aus der Winapi.Windows.pas verwendest).

Woran erkennt man einen BufferOverflow denn? Was muss man da falsch machen um den zu erzeugen.
BufferOverflows sind fiese Fehler, die man nur schwer erkennen kann. Oft treten sie bei Verwendung von Arrays (Schreibzugriffe nach dem letzten validen Index) oder bei der Verwendung von untypisierten Pointern (wie z.b. im Falle von MSDN-Library durchsuchenGetFileAttributesEx) auf. Wäre z.b. das TWin32FileAttributeData angenommen mal 4-Byte zu klein und auf dem Stack liegt zufälligerweise eine lokale Integer-Variable direkt hinter dem Struct, dann würde die API fehlerhafterweise den Wert der dahinterliegenden Variable mit "Irgendwas" überschreiben.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#37

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 14:13
Zitat:
Oft treten sie bei Verwendung von Arrays (Schreibzugriffe nach dem letzten validen Index)
Solche Fehler zu vermeiden da achte ich peinlichst genau drauf.

Nur stellt sich mir noch immer die Frage, warum XE8 das Problem nicht hat Tokyo ohne HF aber schon. Und warum nur 64 Bit. Dann müsste das 32er Kompilat ja auch Probleme haben wenn es ein Codefehler wäre.
Wenn es tatsächlich ein BufferOverflow irgendwo wäre (falscher Index Array ...), dann müsste ich doch schon vorher wenigstens Zugriffsverletzungen oder ähnliche Fehler sehen.

Wie bereits erwähnt besteht der Fehler erst seit dem Umstieg auf Tokyo.

FastMM4 zeigt keinerlei Auffälligkeiten. Memory Leaks gibt es auch keine.

Geändert von SneakyBagels (13. Mai 2017 um 14:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#38

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 14:47
Nur stellt sich mir noch immer die Frage, warum XE8 das Problem nicht hat Tokyo ohne HF aber schon. Und warum nur 64 Bit. Dann müsste das 32er Kompilat ja auch Probleme haben wenn es ein Codefehler wäre.
Ich kann mich an dieser Stelle nur nochmal selbst zitieren:
Zitat:
Sobald IRGENDWO ein BufferOverflow stattfindet, ist der restliche Programmablauf komplett undeterministisch (zumindest erscheint es unserer beschränkten Wahrnehmung so). Das mit Logik erklären zu wollen, ist grundsätzlich zum Scheitern verurteilt.
XE8 und Tokyo haben unterschiedliche Compilerversionen und damit auch unterschiedliche Codegenerierung und Codeoptimierung. Ebenso unterscheidet sich die Codegenerierung zwischen 64 und 32 Bit (unter anderem in der von mir erwähnten Form der unterschiedlichen Größe bestimmter Datentypen).

Dann müsste das 32er Kompilat ja auch Probleme haben wenn es ein Codefehler wäre.
Die Annahme ist leider falsch. Unter 32-Bit wird sehr wahrscheinlich einfach eine Speicherstelle überschrieben, die zu diesem Zeitpunkt schon irrelevant oder sogar komplett unbenutzt ist.

Wenn es tatsächlich ein BufferOverflow irgendwo wäre (falscher Index Array ...), dann müsste ich doch schon vorher wenigstens Zugriffsverletzungen oder ähnliche Fehler sehen.
Die Annahme ist ebenfalls falsch. Es kommt erst dann zu Fehlern, wenn dein Code die überschriebenen Speicherbereiche verwendet und an der dortigen Stelle bestimmte Daten erwartet, die dann natürlich nicht mehr stimmen. Das KANN eine Zugriffsverletzung sein (sofern z.b. nochmal eine Dereferenzierung stattfindet), kann aber auch genausogut andere Seiteneffekte haben. Kaputte Schleifenzähler sind hier sogar sehr häufig.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#39

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 14:53
Zitat:
XE8 und Tokyo haben unterschiedliche Compilerversionen und damit auch unterschiedliche Codegenerierung und Codeoptimierung.
Jetzt bin ich hin und her gerissen und weiß nicht, ob ich jetzt einen BufferOverflow suchen soll oder nicht.
Ich bin mir aber 100% sicher, dass ich selber keine eingebaut habe.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#40

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 14:57
Also es gibt auch Tools, um BufferOverflows zu erkennen. Leider habe ich damit nur Erfahrung bei Visual Studio und kann dir für Delphi hier nicht großartig weiterhelfen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 19:40 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