Hallo,
ich habe eine Frage. Wie schaffe ich es mit C++ auf den erweiterten Speicher zuzugrifen um dort ggf. etwas auszulesen. Es geht nur ums Lesen.
Vielen Dank im Voraus…
Peter
Hallo,
ich habe eine Frage. Wie schaffe ich es mit C++ auf den erweiterten Speicher zuzugrifen um dort ggf. etwas auszulesen. Es geht nur ums Lesen.
Vielen Dank im Voraus…
Peter
Hi,
was verstehst Du unter erweiterter Speicher? Wie in DOS-Zeiten? EMS oder XMS? Ein paar Infos mehr wäre schön…
Gruss,
Herb
Ich meine den Speicher, den in die Programme, die laufen, Ihre Variablen etc ablegen.
mfg
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi,
willst Du von Deinem Programm die Daten anderer Programme auslesen? Also in deren Prozess eingreifen?
Beschreib doch mal Deine genauen Anforderungen.
Gruss,
Herb
Ich möchte in den Prozess anderer Programme eingreifen und die Daten lesen, die das programm in den Arbeitsspeicher schreibt.
Das heisst ich möchte ihm z.b. sagen, dass ich Adresse 0x0012FF7C auslesen möchte…
Ich möchte in den Prozess anderer Programme eingreifen und die
Daten lesen, die das programm in den Arbeitsspeicher schreibt.
Das heisst ich möchte ihm z.b. sagen, dass ich Adresse
0x0012FF7C auslesen möchte…
Prinzipiell geht das so
char* ptr = 0x0012FF7C;
char value = *ptr;
ABER …
auf den Speicher eines anderen Prozesses kannst Du zumindest unter modernen Windowsversionen nicht zugreifen, da jeder Prozess seinen eigenen virtuellen Speicher besitzt.
Prozessübergreifend kannst Du nur auf „gemeinsamen Speicher“, sogenanntes „Shared Memory“ zugreifen.
Shared Memory wird von Prozess (a) angelegt und kann von Prozess (b) gelesen bzw. je nach Zugriffsberechtigung auch beschrieben werden.
Klaus
Hi,
Prinzipiell geht das so
char* ptr = 0x0012FF7C;
char value = *ptr;ABER …
auf den Speicher eines anderen Prozesses kannst Du zumindest
unter modernen Windowsversionen nicht zugreifen, da jeder
Prozess seinen eigenen virtuellen Speicher besitzt.Prozessübergreifend kannst Du nur auf „gemeinsamen Speicher“,
sogenanntes „Shared Memory“ zugreifen.
Shared Memory wird von Prozess (a) angelegt und kann von
Prozess (b) gelesen bzw. je nach Zugriffsberechtigung auch
beschrieben werden.Klaus
Hi,
nicht nur das, auch die Adresse 0x0012FF7C im Datenbereich eines Prozesses ist eine virtuelle Adresse, das heisst, die ‚echte‘ (physikalische) Adresse ist eine Andere.
Genau deshalb gibt es ja die Interprozesskommunikationsmechanismen (was für ein Wort). Aber ich glaube nicht, dass Peter Zugriff auf den Quellcode des Programms hat, in dessen Speicherbereich er eingreifen will…
Gruss,
Herb
Richtig, den habe ich leider nicht. :-/
Mal ne blöde Frage:
Ist es GAR nicht möglich ein Abbbild des Arbeitsspeichers(oder nur ein Teil davon) in eine Textdatei zu speichern?
mfg
leon
Hi,
doch, das ist durchaus möglich, es ist nur wirklich aufwändig. Zum debuggen des Betriebssystems muss das möglich sein. Also musst Du Dich im Systemkontext bewegen und die entsprechenden Debuggingroutinen kennen. Wenn W2k zum Beispiel einen Memorydump bei einem Bluescreen schreibt, dannist der Dump genau das Speicherabblid, das Du willst.
Gruss,
Herb
Hi,
doch, das ist durchaus möglich, es ist nur wirklich aufwändig.
Zum debuggen des Betriebssystems muss das möglich sein. Also
musst Du Dich im Systemkontext bewegen und die entsprechenden
Debuggingroutinen kennen. Wenn W2k zum Beispiel einen
Memorydump bei einem Bluescreen schreibt, dannist der Dump
genau das Speicherabblid, das Du willst.
mhmm, und bei Linux? Und vor allem: kann man soche memorydumps irgendwie auswerten? Wenn das der Bluescreen kommt, dann kommt meineswissens die Speicheradressen…aber wie greife ich auf die Werte zu?
mfg
leon
Hi,
unter Linux beschränkt sich mein Systemwissen auf ein paar Pipes und Shared Memory. Und unter Windows hab ich noch nie ernsthaft versucht, den kompletten Speicher nach Werten abzugrasen. Die Memorydumps kannst Du sicher auswerten, die schmeisst Windows irgendwo hin. Nur wie das Dateiformat aussieht, da fragst Du besser jemand anderes.
Die MSDN dürfte vielleicht helfen.
Der Bluescreen spuckt in der Regel die geladenen Treiber/Anwendungen und deren Speicherandresse aus. Dadurch kann man feststellen, welche Anwendung den Fehler verursacht hat (die Adresse wird genannt). Das ist hilfreich für Treiberentwickler, die können ihren Treiber nämlich debuggen und da ist der Offset des Fehlers recht hilfreich.
Gruss,
Herb
Hi,
unter Linux beschränkt sich mein Systemwissen auf ein paar
Pipes und Shared Memory. Und unter Windows hab ich noch nie
ernsthaft versucht, den kompletten Speicher nach Werten
abzugrasen. Die Memorydumps kannst Du sicher auswerten, die
schmeisst Windows irgendwo hin. Nur wie das Dateiformat
aussieht, da fragst Du besser jemand anderes.
Die MSDN dürfte vielleicht helfen.
Der Bluescreen spuckt in der Regel die geladenen
Treiber/Anwendungen und deren Speicherandresse aus. Dadurch
kann man feststellen, welche Anwendung den Fehler verursacht
hat (die Adresse wird genannt). Das ist hilfreich für
Treiberentwickler, die können ihren Treiber nämlich debuggen
und da ist der Offset des Fehlers recht hilfreich.
Für Windows wäre da einfach nur nebenher interessant(falls ich mal unter die Hacker irgendwann gehen wollen würde), aber für Linux fände ichs interessant(nutze ich viel liebe).
Kannst du mir das wenige Wissen zu deinen Pipes und Shared Memory mal posten?
–>/me hat nämlich dazu gar keins, ist nur fröhlicher Linuxuser mit Programmierinteresse
mfg leon
Hi,
bevor ich hier Romane poste, probier mal:
UNIX Systemprogrammierung, ISBN 3893199586 Buch anschauen
oder
Linux- Unix- Systemprogrammierung, ISBN 3827315123 Buch anschauen
Ausserdem gibts ja noch die man und howto’s, da steht im Grunde genommen alles Drin, was Du brauchst.
Gruss,
Herb
Ok,danke, jetzt bin ich soweit wie vorher
Aber die Bücher werde ich mir näher anschauen
gruß, leon