Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Debugger näyttää vain 2 gigaa. (Vista)

tomas [02.03.2009 21:56:31]

#

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?

Metabolix [02.03.2009 22:02:48]

#

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.

tomas [05.03.2009 14:44:55]

#

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.

Metabolix [05.03.2009 15:41:04]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta