Memory dump

Status
Niet open voor verdere reacties.

kevincs

Gebruiker
Lid geworden
27 aug 2007
Berichten
48
Ik zoek een manier om het geheugen van 0x00000000 tot 0xFFFFFFFF weer te geven, en ik wou dit met een pointers doen. Ze een expliciete waarde toekennen werkte niet, dus deed ik dit:

int getal;
int *pgetal;
pgetal = &getal - &getal;

dan wijst hij naar 0x00000000

maar als je de waarde wilt lezen (*pgetal) crasht het programma
Weet iemand hoe dit komt?
Verbied windows het misschien?
 
Misschien omdat het gaat om een hexadecimale waarde (geheugenlocatie).

Ik zal eens kijken hoe je het wel kan doen(met printf misschien??).
 
Idan wijst hij naar 0x00000000

maar als je de waarde wilt lezen (*pgetal) crasht het programma

Dat lijkt me vrij logish. Het geheugenadres 0x00000000 bestaat namelijk niet (null pointer). Die pointer kan je dus ook niet dereferencen.
 
Dat lijkt me vrij logish. Het geheugenadres 0x00000000 bestaat namelijk niet (null pointer). Die pointer kan je dus ook niet dereferencen.

Dat lijkt me dan helder.
Maar is er met c++ een eenvoudige manier om de totale inhoud van je geheugen af te drukken (als lijst o.i.d.)? Ik zou zo niet kunnen bedenken hoe je dat doet.

Is het niet mogelijk om een lus te maken die simpelweg het totale hex getal (van begin tot eind geheugen) in een (tijdelijke) pointer op slaat en gelijk afdrukt?
 
Dat lijkt me vrij logish. Het geheugenadres 0x00000000 bestaat namelijk niet (null pointer). Die pointer kan je dus ook niet dereferencen.
0x00000000 is NIET gelijk aan de NULL pointer! maar effectief het eerste geheugenadres

kevincs zei:
Verbied windows het misschien?
Niet enkel windows, maar elk zichezelf respecterend OS doet dat. Wanneer een programma opstart krijgt het door het OS een geheugenblok toegewezen, waarbinnen het programma draait. Het is niet toegelaten om gelijk welk geheugenadres buiten dat blok aan te spreken, aangezien dit adres vermoedelijk door een ander proces gebruikt wordt... het zou hacken nogal eenvoudig maken :rolleyes:
 
Kben eigenlijk mijn eigen os aant maken. Maar het was om te oefenen. Het os verbiedt dit via de GDT dacht ik (of een andere 3 letter afkorting :))
Een pointer een expliciete waarde toekennen gaat blijkbaar wel:
int *pointer;
pointer = (int *) 0x00000000;

De waarden in het geheugen kan je blijkbaar zelfs in je eigen segment niet aanpassen;
de X86 verdeelt het programma in 2 segmenten:
data en code, zodat code nooit aangepast kan worden en data nooit uitgevoerd.

Deze kan dus eigenlijk off topic :p
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan