Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Wie kann mann auf beliebigen Ram Speicher zugreifen ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.08.2003, 17:47 Uhr
~Bon
Gast


Hi,

ich will unter Windows XP und Visual C++ 6.0 auf beliebigen RAM Speicher zugreifen. Es soll gelesen und geschrieben werden können.

Und nun mein Problem:
Bei folgendem Code gibts eine Fehlermeldung , unter Win9x hats noch funktioniert .


C++:
unsigned char ReadByte(unsigned long address)
{
  volatile unsigned char *ptr = (unsigned char*)address;
  
  return(*ptr);
}



Fehlermeldung:
Unbehandelte Ausnahme in MemoryEditor.exe:0xC0000005:Access Violation.

Weiß jemand, wie man mit Windows 32-Bit Systemen auf beliebigen Speicher zugreifen kann?

Gruß Bon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.08.2003, 10:31 Uhr
e-DJ



Das geht nicht.

Der Prozessor teilt den Speicher in sogenannte Pages auf. Eine Applikation bekommt einen eigenen Adressraum zugeteilt und der Prozessor bildet die Adressen dieses Adressraums auf die tatsächlichen Adressen im Speicher ab. Dabei kann man eben nur auf die Pages zugreifen, die zu dem eigenen Adressraum gehören.
Das nennt man dann bei Intel Protected Mode.

Unter Windows 9x ging das wohl noch, weil da ein DOS mitgelaufen ist. DOS arbeitet im REAL-Mode. Hier sind die Adressen, die man angibt tatsächliche Hardware-Speicheradressen.

Im Protected Mode bekommt jeder Prozess seinen eigenen Adressraum und kann nur innerhalb dieses Adressraums Daten lesen und speichern. Ein Zugriff auf den Adressraum anderer Prozesse ist hardwaretechnisch nicht möglich. Dadurch kann ein Programm nicht (absochtlich oder zufällig) in den Daten oder im Code eines anderen Programmes rumschreiben und dieses Programm dadurch zum Absturz bringen, was bei DOS und bei Windows 9x durchaus noch vorgekommen ist.

Damit Daten aber dennoch zwischen Prozessen ausgetauscht werden können, gibt es das Betriebssystem, das im sogenannten Kernel-Modus läuft. Das BS stellt einen Speicherbereich zur Verfügung, auf den alle Prozesse zugreifen können, z.B. um API-Funktionen aufrufen zu können. Das BS ist in diesem Falle dafür zuständig, den Zugriff auf diesen Speicher zu regeln.

Daher kommt es eben auch im Protected Mode hin und wieder zu bösen Abstürzen :-)


e-DJ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.08.2003, 17:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


per Assembler lässt sich der protected mode aber überlisten, sonst würden z.b so kleine Trainer für Spiele die ein paar Adressen "rumschieben" nicht funktionieren, genausowenig wie debugger...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: