Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C dumbuser küsimus. märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
k2iguvahetaja
HV veteran

liitunud: 07.05.2003



Autoriseeritud ID-kaardiga

sõnum 17.03.2008 17:24:40 C dumbuser küsimus. vasta tsitaadiga

Kuidas ma saaksin pointerile nn "custom" mäluaadressi omistada?

nii ofc töötab:
p = &i;

, aga ma soovin suvalist aadressi kasutada, näiteks:
p = 0xFFAFA000;
ja siis sealt andmeid võtta.
Kommentaarid: 45 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 38
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
i8080
Kreisi kasutaja
i8080

liitunud: 15.03.2002



Autoriseeritud ID-kaardiga

sõnum 17.03.2008 17:53:30 vasta tsitaadiga

pead kasutama tüübiteisendamist (võin eestipärase väljendiga eksida)

kui näiteks oletame see p oli sul deklareeritud kui char* tüüpi pointer eelnevalt siis näeks asi välja sedasi

p = (char*)0x12345678;
Kommentaarid: 165 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 148
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
k2iguvahetaja
HV veteran

liitunud: 07.05.2003



Autoriseeritud ID-kaardiga

sõnum 17.03.2008 18:11:53 vasta tsitaadiga

Hmm, ühte programmi jätsin loopi väljastama ühe variable väärtust, et igaks juhuks mälust seda ära ei kustutaks (ma ei tunne windowsi mäluhaldust), teisega üritasin sellelt aadressilt kätte samal ajal saada selle aadressi väärtust, kuid sain kõigest teise programmi pointeri aadressi ? Miks nii?


#include <stdio.h>
#include <windows.h>

int main(){
    int i = 4095;
    int j = 1;
    int* p;
    p = &i;
    while(1){
               printf("%x == %d, kord: %d\n", p, *p, j);
               j++;
    Sleep(1000);
    }
}


#include <stdio.h>

int main(){
    int* p = (int*)0x22FF74;
    printf("%d", *p);
    return 0;   
}
Kommentaarid: 45 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 38
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 17.03.2008 18:45:58 vasta tsitaadiga

Üldiselt on nii, et ühest programmist ei ole lubatud teise programmi mälu lugeda/kirjutada.
Kui on vaja jagada mälupiirkonda programmide vahel siis selleks on nn. "shared memory".
Kommentaarid: 33 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
i8080
Kreisi kasutaja
i8080

liitunud: 15.03.2002



Autoriseeritud ID-kaardiga

sõnum 17.03.2008 21:31:04 vasta tsitaadiga

win32 puhul on teise protsessi mälu lugemiseks ReadProcessMemory funktsioon. enne vaja protsess, kuhu ligi tahad minna, identifitseerida (mingisuguse enumeration abil vast, EnumProcesses, OpenProcess - uuri PSAPI funktsioone).

niisama lambist mäluaadresside kasutamine pointerina oli pädev vast viimati DOS-i ajastul. niisama naljaviluks võid ju nendega ka korralikus op-süsteemis mängida oma lõbuks, aga praktiline väärtus sellisel tegevusel puudub.
Kommentaarid: 165 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 148
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
maxorator
HV kasutaja

liitunud: 30.08.2006




sõnum 19.03.2008 12:41:26 vasta tsitaadiga

Suvaliselt aadressilt midagi üritades 99% tõenäosusega tuleb access violation ja programm jookseb kokku. Mälu 0x00000000 kuni 0x80000000 on alati selle programmi ala, millest sa seda kätte üritad saada. See aga ei tähenda, et see kõik kättesaadav oleks. Sellel on teatud alad kasutusel ja teatud alad mitte. Kui üritad midagi teha aladega, mis pole kasutusel, saad jällegi access violation-i. 0x80000000 kuni 0xFFFFFFFF on tavaliselt kerneli mälu, seda sa ei saa eales näppida, isegi kui tahaksid. Need mäluaadressid on virtuaalsed, st need ei ühti mingil viisil sellega, kuidas andmed füüsiliselt paigutatud on.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C dumbuser küsimus.
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.