Moi, katselin tuossa debuggerilla (Ollydbg)oman koneen muistia ja ihmettelin memorymappia. Näkyi vain 00010000 hex -7FFE0000 hex.Koneessa kuitenkin 4 gigaa ramia.Käyttis on vista ja onko näin että loppuja muisteja ei pääse edes tsekkaamaan vaan on jotenkin suojattua?
Kannattaa tutustua virtuaalisen muistin toimintaperiaatteisiin. Joka ohjelmalla on siis oma muistiavaruus, ja käyttöjärjestelmä kikkailee hommat niin, että osoite päätyy oikeaan kohtaan todellista muistia. Tähän perustuu myös se, että RAMia voidaan täysin ohjelman tietämättä jatkaa kovalevyn puolelle (swap-tiedostoon). Windows-ohjelmat ladataan tyypillisesti osoitteeseen 0x40000 omassa muistiavaruudessaan. Osoitteella ei ole mitään tekemistä koneen todellisen muistin kanssa. Muistia näkyy vain kaksi gigaa, koska toiset kaksi on Windowsissa varattu kernelin käyttöön (tosin Vistan piti kai tehdä järjestelystä jollain tavalla joustavampi). Teknistä syytä tällaiseen ratkaisuun en ala tässä tarkemmin pohdiskella, mutta pääasia on, että sivutaulua ei tarvitse kernelin funktioita kutsuttaessa vaihtaa, kun se on jokaisen prosessin sivutaulussa samassa kohti.
Kiitos, tuo valaiseekin jo paljon. Samasta syystä debuggeri ilmeisesti heittää 'memory acces violation' herjan seuraavan käskyn yhteydessä?
ADD DWORD PTR ds:[402AACh], eax
Yritti tuohon sitten heittää minkä tahansa osoitteen.
Osoitteen pitäisi varmaankin olla ohjelman käytössä, jotta sitä voisi käyttää. Dumppausvaiheessa debuggeri saattaa antaa nollia muistialueille, joita ei oikeasti ole edes varattu. Kokeile siis sellaista osoitetta, jossa todistettavasti on jotain.
Aihe on jo aika vanha, joten et voi enää vastata siihen.