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
SneakyBagels
(Gast)

n/a Beiträge
 
#1

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

  Alt 13. Mai 2017, 13: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 13:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 13. Mai 2017, 13: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
 
#3

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

  Alt 13. Mai 2017, 13: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
 
#4

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

  Alt 13. Mai 2017, 13: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
SneakyBagels
(Gast)

n/a Beiträge
 
#5

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

  Alt 13. Mai 2017, 14:06
Ich denke ich bin einen Schritt weiter und ich konnte meine Suche auf eine einzige Unit eingrenzen.

Ich habe diese Unit, es ist ein Thread, nun flott in eine normale Class umgeschrieben. Sämtliche Queue und Synchronize sind raus.
Was passiert? Das Problem ist weg. Nur ist das auch keine Lösung.

Problem gelöst!
Es gab genau ein Synchronize in Execute(), so ziemlich am Anfang, wo ich die Variable i von Execute() verwendet habe.
Das sollte doch eigentlich gar nicht möglich sein, da man in Synchronize doch immer eine lokale Schleifenvariable braucht.

Geändert von SneakyBagels (13. Mai 2017 um 14:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:57 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