AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicher eines strings freigeben

Ein Thema von WorstNightmare · begonnen am 13. Dez 2008 · letzter Beitrag vom 14. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Speicher eines strings freigeben

  Alt 13. Dez 2008, 21:49
Hallo,

ich speichere sensible Informationen in einem string, welche dann verschlüsselt werden. Den Ursprungs-string möchte ich gerne aus dem Speicher entfernen, ihn einfach '' zu setzen funktioniert leider nicht.
Wenn ich z.B. eine globale Variable s: string habe und das mache:
  s := DateToStr(Now); Dann sehe ich das Datum in einem Memory Browser natürlich im Speicher. Wie erreiche ich, dass der Inhalt aus dem Speicher verschwindet? Geht das überhaupt, oder muss ich den Speicher dann vorher auch mit einer speziellen Methode anfordern?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 21:55
Du kannst zum Beispiel Folgendes tun:
Delphi-Quellcode:
for i:=1 to Length(Str) do
  Str[i] := 'x';
Durch die For-Schleife wird jedes einzelne Zeichen im Speicher überschrieben, sodass es nicht mehr rekonstruiert werden kann.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 22:05
Stimmt, so ist es weg.
Gibt es noch einen "ordentlicheren" Weg, wo der Speicher auch komplett freigegeben wird, sodass er wieder anders genutzt werden kann?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 22:09
nein nicht bei Strings da deren Speicher den Speichermanger verwendet und dieser sich um die Freigabe kümmert. Und selbst wenn der Speicher frei gegeben wurde kann dieser noch im Ram stehen oder im swap file.
Im übrigen ist sowas verschwendete Zeit. Wer die Daten will liest sie aus dem Binary aus bzw. geht im Debugger alles Schritt für Schritt durch.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 22:11
Der Speicher wird freigegeben, wenn dem String ein neuer Wert zugewiesen wird oder er aus dem Scope läuft (die enthaltende Klasse freigegeben wird, die Prozedur beendet wird, in der der String als lokale Variable deklariert wurde, oder selbiges mit dem enthaltenden Record passiert). Wenn du explizit den Speicher freigeben willst, genügt es, einen Leerstring zuzuweisen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 22:25
Ob der Speicher wirklich freigegeben wird bestimmt der Speichermanager. Wenn man einen Leerstring zuweist heißt das noch lange nicht das der Speichermanager auch den Speicher frei gibt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 22:30
Zitat von Apollonius:
Du kannst zum Beispiel Folgendes tun:
Delphi-Quellcode:
for i:=1 to Length(Str) do
  Str[i] := 'x';
Durch die For-Schleife wird jedes einzelne Zeichen im Speicher überschrieben, sodass es nicht mehr rekonstruiert werden kann.
Wenn schon, dann bitte mit Delphi-Referenz durchsuchenFillChar
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Speicher eines strings freigeben

  Alt 13. Dez 2008, 22:45
Aber wie schon erwähnt wurde ... aus dem virtuellen Speicher der Anwendung bekommt man es leicht raus (infach überschreiben),
aber was den physischen Speicher, die Auslagerungs und Co. angeht, da gibt es keine zuverlässige Möglichkeit, da man selber nicht wirklich Einfluß drauf hat, wo etwas gespeichert wird.
Windows verschiebt den Speicher ja wie es will hin und her und ob dann noch irgendwo 'ne alte Kopie existiert ...

PS:
wie befüllst du den den String?
womöglich ibt es ja auch innerhalb deiner Anwendug schon Kopieen (z.B. bei längenänderung und beim zusammenführen mehrerer Strings, wird da einiges an speicher umkopiert)

Ja und dann hat SirThornberry Recht ... wenn jemand da ran will, dann ließt er sich die Daten einfach aus, bevor sie von deinem Programm gelöscht werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Speicher eines strings freigeben

  Alt 14. Dez 2008, 08:46
Zitat von NamenLozer:
Wenn schon, dann bitte mit Delphi-Referenz durchsuchenFillChar
Aber bitte nicht unter Delphi 2009 verwenden, außer du passt den "Size" Parameter an Unicode an.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Speicher eines strings freigeben

  Alt 14. Dez 2008, 12:27
Zitat von NamenLozer:
Wenn schon, dann bitte mit Delphi-Referenz durchsuchenFillChar
Ihr ewigen Nörgler. Du hast natürlich recht.

Bezüglich Sinn/Unsinn: Man sollte durchaus Passwörter o.Ä. überschreiben, die der Nutzer eingegeben hat. Windows bietet sogar extra die Funktion MSDN-Library durchsuchenSecureZeroMemory für solche Zwecke. Als Erklärung wird Folgendes genannt:
Zitat:
The password would remain on the application stack where it could be captured in a crash dump or probed by a malicious application.
Auch wenn es hier um den Heap und nicht um den Stack geht, ist die Überlegung übertragbar. Es geht ja explizit nicht darum, Daten vor dem Anwender zu schützen, der einen Debugger verwenden kann, sondern vor anderen Anwendungen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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