Fragen zu Zeigern / Speicheradressen
-
Hallo!
Da ich jetz ein bisschen darüber lerne, habe ich ein paar Fragen!
1. Gibts eine Möglichkeit auch auf Speicheradressen zuzugrifen, die außerhalb des Bereiches des Programmes sind, z.b. einen kompletten Scan des Arbeitsspeichers nach bestimmten Strings oder Zahlen, ohne das dabei ein Absturzt entsteht.
2. Wie kann ich einer Variable eine bestimmte Speicheradresse zuweisen und dann diese Stelel auslesen?
Bisher habe ich nur mit Zeigern gearbeitet, also z.B.
int i; int* pi; pi = &i;
mFG
Damian
-
Hallo,
DaMiNaToR schrieb:
1. Gibts eine Möglichkeit auch auf Speicheradressen zuzugrifen, die außerhalb des Bereiches des Programmes sind, z.b. einen kompletten Scan des Arbeitsspeichers nach bestimmten Strings oder Zahlen, ohne das dabei ein Absturzt entsteht.
ob und welche Möglichkeiten bestehen, bestimmen die Funktionen des Betriebssystems, und nicht die Möglichkeiten der Sprache C++
DaMiNaToR schrieb:
2. Wie kann ich einer Variable eine bestimmte Speicheradresse zuweisen und dann diese Stelel auslesen?
kannst du nicht, da du nicht wissen kannst, ob die "Adresse", die du zuzuweisen versuchst, im Bereich des Speichers liegt, der für das Programm oder den Prozess gültig ist. Prozeß- und Speicherverwaltung ist Sache des Betriebssystems, nur Speicher, den du im Programm mit den dafür vorgesehenen Mechanismen (z.B. mit new) , oder mit betriebssystem-spezifischen Funktionen) anforderst, ist mit Sicherheit gültiger Speicher.
MfG
-
Ich habe von Programmen gehört, die Passwörter aus dem Arbeitsspeicher auslesen ,z.B. Trojaner, was hat es damit auf sich?
2. Aber wenn der Arbeitsspeicher voll ist wird er ja bei Windows auf der Festplatte ausgelagert und in dieser Datei kann man dann suchen, habe ich recht?
mFG
Damian
-
Probe-Nutzer schrieb:
DaMiNaToR schrieb:
1. Gibts eine Möglichkeit auch auf Speicheradressen zuzugrifen, die außerhalb des Bereiches des Programmes sind, z.b. einen kompletten Scan des Arbeitsspeichers nach bestimmten Strings oder Zahlen, ohne das dabei ein Absturzt entsteht.
ob und welche Möglichkeiten bestehen, bestimmen die Funktionen des Betriebssystems, und nicht die Möglichkeiten der Sprache C++
unter windows: ja
unter linux: erst wird ein sigsev gesendet(kann man catchen), bei 2. Mal wird ein SigKill gesendet.Probe-Nutzer schrieb:
DaMiNaToR schrieb:
2. Wie kann ich einer Variable eine bestimmte Speicheradresse zuweisen und dann diese Stelel auslesen?
kannst du nicht, da du nicht wissen kannst, ob die "Adresse", die du zuzuweisen versuchst, im Bereich des Speichers liegt, der für das Programm oder den Prozess gültig ist. Prozeß- und Speicherverwaltung ist Sache des Betriebssystems, nur Speicher, den du im Programm mit den dafür vorgesehenen Mechanismen (z.B. mit new) , oder mit betriebssystem-spezifischen Funktionen) anforderst, ist mit Sicherheit gültiger Speicher.
Einfach eine Variable auf dem Stack oder Heap erzeugen, einen Zeiger auf die Addresse richten und dann mit "++var" bzw. mit "--var" den Speicher abklappern.
Es kann sein, dass das nur mit nicht-WindowsApplikationen geht, da diese dann nicht das WinAPI Speichermanagement aufgezwungen bekommen, etc.int i = 0; int *ptr = i; for(short s = 100; s >= 0; --s) { ++ptr; cout << "ptr: " << ptr << endl; // Addresse auf die der Pointer zeigt cout << "*ptr: " << *ptr << endl; // Wert an der Addresse }
DaMiNaToR schrieb:
2. Aber wenn der Arbeitsspeicher voll ist wird er ja bei Windows auf der Festplatte ausgelagert und in dieser Datei kann man dann suchen, habe ich recht?
Ja, die pagefile.sys (versteckt auf C: ) kann einfach ausgelesen werden.
Ich muss dir sicherlich nicht erklären, dass es gar nichts bringt, wenn du deinen Virus in Umlauf bringst, da...
1. ... er sowieso irgendwann von Virenscannern erkannt wird.
2. ...du garantiert getraced wirst.Also alles auf eigene Gefahr.
mfg
-
terraner schrieb:
Ja, die pagefile.sys (versteckt auf C: ) kann einfach ausgelesen werden.
Für die Paranoiker unter uns stellt auch die Auslagerungsdatei (Pagefile.sys) ein Sicherheitsrisiko dar. Denn nachdem Windows heruntergefahren wurde, stehen trotzdem noch Passwörter und andere sensible Daten in der Auslagerungsdatei, an die jeder per DOS-Bootdiskette heran kommen könnte. Als Lösung bietet sich an, die Auslagerungsdatei beim Herunterfahren zu löschen, bzw. zu leeren.
mfg
-
Ich muss dir sicherlich nicht erklären, dass es gar nichts bringt, wenn du deinen Virus in Umlauf bringst, da...
1. ... er sowieso irgendwann von Virenscannern erkannt wird.Das ist mir klar, *g* ich habe nicht vor ein Virus zu programmieren, dazu ist meine Erfahrung noch zu klein, das war eine Frage der neugier, wollte mal gucken was so im Arbeitsspeicher ist
-
Und danke für den Code, ich sehe, Windows verweigert mir den Zugriff auf den Arbeitsspeicher außerhalb des Programms, und zwar mit einem Absturz...
Kann man Fehler in C++ abfangen?
Z.B. so wie in Visual Basic das "On Error Resume Next" ?
mFG
DaMiNaToR
-
DaMiNaToR schrieb:
Kann man Fehler in C++ abfangen?
Z.B. so wie in Visual Basic das "On Error Resume Next" ?
Ja, mit Try-Catch Blöcken und mit Exceptions.
Bei mir stürzt das Programm nur dann ab, wenn ich die Schleife zu oft durchlaufen lasse ( >1000 Mal).
mfg