Forum » Programiranje » iskanje/spreminjanje vrednosti v pomnilniku
iskanje/spreminjanje vrednosti v pomnilniku
McAjvar ::
zivjo!
naj se najprej opravicim, nisem ravno nek programer (c poznam npr. le do kake osnovne for zanke), bi pa vas zelel povprasati za nasvet. zanima me zaenkrat zgolj informativno, v katerem jeziku bi bilo najbolj enostavno izvesti sledece: za neko aplikacijo, ki se izvaja, bi zelel ugotoviti vrednost kake spremenljivke, ki je trenutno shranjena v pomnilniku oz. ce je morda mozno celo to vrednost spremeniti, povecati denimo za 1 ali kaj podobnega. ali je to ze precej napredna zadeva? kot php-jasu, bi mi bilo tezko/bi vzelo veliko casa, ce bi se zelel nauciti narediti kaj taksnega v skorajda kateremkoli programskem jeziku? je s perlom to mozno? ali pa s pythonom? v katerem jeziku bi bilo dejansko to najbolj enostavno? kaksno literaturo priporocate cimbolj specificno za moje vprasanje?
hvala za odgovore!
naj se najprej opravicim, nisem ravno nek programer (c poznam npr. le do kake osnovne for zanke), bi pa vas zelel povprasati za nasvet. zanima me zaenkrat zgolj informativno, v katerem jeziku bi bilo najbolj enostavno izvesti sledece: za neko aplikacijo, ki se izvaja, bi zelel ugotoviti vrednost kake spremenljivke, ki je trenutno shranjena v pomnilniku oz. ce je morda mozno celo to vrednost spremeniti, povecati denimo za 1 ali kaj podobnega. ali je to ze precej napredna zadeva? kot php-jasu, bi mi bilo tezko/bi vzelo veliko casa, ce bi se zelel nauciti narediti kaj taksnega v skorajda kateremkoli programskem jeziku? je s perlom to mozno? ali pa s pythonom? v katerem jeziku bi bilo dejansko to najbolj enostavno? kaksno literaturo priporocate cimbolj specificno za moje vprasanje?
hvala za odgovore!
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov
but an exercise in the limiting of privacy."
- Isaac Asimov
Microsoft ::
Ja zdej, kolker sm jst videl C++, obstajajo kazalci, ki kazejo nekam v pomnilnik.
Zdej, recimo naredis:
int a = 0;
int b = 1;
int* add = &a;
In zdej mas v add neko vrednost, recimo 122423881. add kaze na nek naslov. Ta nasov je tist naslov, na katerem se nahaja a.
Zdej, lahka vrednost add spreminjas, s cemer mislim, da se pomikas po pomnilniku. Jst sem malo preizkusil, in sem se lahko premiknil za eno naprej, kar je stevilko povecalo za 4 (Tu bi mene zanimalo, zakaj ravno 4? Zato, ker sem se premaknil od 'a' do 'b', int pa je velik 4byte, zato ker se po spominu dostopa do 4byte naenkrat z enim naslovom, al kaj?)
Pol pa, da izpises, kaj je na tistem naslovu, pa se mi zdi, da gre takole:
Console::Write(*add);
by Miha
Zdej, recimo naredis:
int a = 0;
int b = 1;
int* add = &a;
In zdej mas v add neko vrednost, recimo 122423881. add kaze na nek naslov. Ta nasov je tist naslov, na katerem se nahaja a.
Zdej, lahka vrednost add spreminjas, s cemer mislim, da se pomikas po pomnilniku. Jst sem malo preizkusil, in sem se lahko premiknil za eno naprej, kar je stevilko povecalo za 4 (Tu bi mene zanimalo, zakaj ravno 4? Zato, ker sem se premaknil od 'a' do 'b', int pa je velik 4byte, zato ker se po spominu dostopa do 4byte naenkrat z enim naslovom, al kaj?)
Pol pa, da izpises, kaj je na tistem naslovu, pa se mi zdi, da gre takole:
Console::Write(*add);
by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr
Zgodovina sprememb…
- spremenil: Microsoft ()
SasoS ::
int *a;
char *c;
double *d;
a++; te premakne za 4 byte naprej, c++; te premakne za 1 byte, d++; pa za 8...tam se pač nahaja (lahko) naslednja spremenljivka tega tipa. Uporabno če recimo greš skozi array:
int *a;
a = (int *)malloc(sizeof(int) * 100);
for(int i=0; i < 100; i++) {
printf("a: %d\n", a) // izpise naslov kam kaze a
printf("a: %d\n", *a) // izpiše vrednost ki se nahaja na tistem naslovu
a++;
}
Na x86 lahko vedno dostopaš do posameznih bytov v pomnilniku.
Če ne pa, programa ki ti bo šaril po memoriji od drugih aplikacij v sodobnem OSu ne boš naredil ker vsak proces teče v svojem naslovnem prostoru (šlo bi v DOSu recimo). Za spremljanje in spreminjanje spremeljivk lahko uporabiš kak debugger.
char *c;
double *d;
a++; te premakne za 4 byte naprej, c++; te premakne za 1 byte, d++; pa za 8...tam se pač nahaja (lahko) naslednja spremenljivka tega tipa. Uporabno če recimo greš skozi array:
int *a;
a = (int *)malloc(sizeof(int) * 100);
for(int i=0; i < 100; i++) {
printf("a: %d\n", a) // izpise naslov kam kaze a
printf("a: %d\n", *a) // izpiše vrednost ki se nahaja na tistem naslovu
a++;
}
Na x86 lahko vedno dostopaš do posameznih bytov v pomnilniku.
Če ne pa, programa ki ti bo šaril po memoriji od drugih aplikacij v sodobnem OSu ne boš naredil ker vsak proces teče v svojem naslovnem prostoru (šlo bi v DOSu recimo). Za spremljanje in spreminjanje spremeljivk lahko uporabiš kak debugger.
McAjvar ::
hmm... hvala za mnenja.
mislim, da bi bilo posteno od mene, da malo bolj pojasnim situacijo: se kdo morda spomni igre diablo 1? in je bil en character editor, ki je deloval tako, da si moral imeti nalozeno igro, se alt-tabal v ta editor in je le-ta iz memorije pobral podatke o liku, nato pa si lahko naredil dar mar z vsem tem.
no, gre za to, da imam eno znj aplikacijo, ki laufa, zelel pa bi vsaj spremljati nekatere vrednosti spremenljivk, ki jih ta zadeva uporablja. v enem primeru gre za eno simpl aplikacijo, v drugem primeru pa za swf programcic, ki laufa preko spleta.
se pa bojim, da ima big whale najbrz prav in glede na moje izkusnje z aplikacijami taksnega tipa narekujejo se nekaj let treninga, preden se lotim cesa taksnega :)
se enkrat hvala.
mislim, da bi bilo posteno od mene, da malo bolj pojasnim situacijo: se kdo morda spomni igre diablo 1? in je bil en character editor, ki je deloval tako, da si moral imeti nalozeno igro, se alt-tabal v ta editor in je le-ta iz memorije pobral podatke o liku, nato pa si lahko naredil dar mar z vsem tem.
no, gre za to, da imam eno znj aplikacijo, ki laufa, zelel pa bi vsaj spremljati nekatere vrednosti spremenljivk, ki jih ta zadeva uporablja. v enem primeru gre za eno simpl aplikacijo, v drugem primeru pa za swf programcic, ki laufa preko spleta.
se pa bojim, da ima big whale najbrz prav in glede na moje izkusnje z aplikacijami taksnega tipa narekujejo se nekaj let treninga, preden se lotim cesa taksnega :)
se enkrat hvala.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov
but an exercise in the limiting of privacy."
- Isaac Asimov
BluPhenix ::
Nas so učili, da razen v primeru da točno veš kaj delaš poseganje v RAM kjer se hranijo podatki drugih programov ni pametno početje, ne se potem čudit če ne bo vse delovalo kot bi moralo.
64202 boljše osciloskop, z voltmetrom boš malo kaj videl, refresh rama je malo prehiter...
64202 boljše osciloskop, z voltmetrom boš malo kaj videl, refresh rama je malo prehiter...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c napaka .c:4:1: error: expected identifier or '(' before '{' tokenOddelek: Programiranje | 1943 (1516) | MrStein |
» | Pomoč pri programiranju feOddelek: Programiranje | 2520 (1670) | ducttape |
» | [C] struct in int[] (strani: 1 2 )Oddelek: Programiranje | 7357 (6430) | MrBrdo |
» | C++(bin file) vprašanjeOddelek: Programiranje | 1507 (1385) | technolog |
» | Pomoč pri c++ razlagaOddelek: Programiranje | 2323 (2065) | Person |