Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
k2iguvahetaja
HV veteran
liitunud: 07.05.2003
|
17.03.2008 17:24:40
C dumbuser küsimus. |
|
|
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 |
|
|
i8080
Kreisi kasutaja
liitunud: 15.03.2002
|
17.03.2008 17:53:30
|
|
|
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: 166 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
149 |
|
tagasi üles |
|
|
k2iguvahetaja
HV veteran
liitunud: 07.05.2003
|
17.03.2008 18:11:53
|
|
|
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 |
|
|
troglodyte
Kreisi kasutaja
liitunud: 09.08.2002
|
17.03.2008 18:45:58
|
|
|
Ü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 |
|
|
i8080
Kreisi kasutaja
liitunud: 15.03.2002
|
17.03.2008 21:31:04
|
|
|
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: 166 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
149 |
|
tagasi üles |
|
|
maxorator
HV kasutaja
liitunud: 30.08.2006
|
19.03.2008 12:41:26
|
|
|
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 |
|
|
|
lisa lemmikuks |
|
|
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
|
|