Forum » Programiranje » [Assembly]Spreminjanje vrednosti v spominu
[Assembly]Spreminjanje vrednosti v spominu
*ziga* ::
Zivjo
No nekaj casa sem ze C++ in VB6 in sem se odlocil za prehod v Assembly. V njem sem cisti zacetnik. Rabil pa bi neko kodo ki pac spremeni dolocenemu procesu neko vrednost...se pravi en naslov iz spomina. V VB6 bi zapisal takole
spreminjam ("Proces_aplikacije", &H00000, 0 )
bi mi lahko kdo dal kodo za v Assembly ?
seveda tudi linki do tutorialov bi bili dobrdosli.
Hvala.
No nekaj casa sem ze C++ in VB6 in sem se odlocil za prehod v Assembly. V njem sem cisti zacetnik. Rabil pa bi neko kodo ki pac spremeni dolocenemu procesu neko vrednost...se pravi en naslov iz spomina. V VB6 bi zapisal takole
spreminjam ("Proces_aplikacije", &H00000, 0 )
bi mi lahko kdo dal kodo za v Assembly ?
seveda tudi linki do tutorialov bi bili dobrdosli.
Hvala.
Matako ::
Ok, najprej "spremeniti procesu neko vrednost" je rahlo nejasen pojem. Sumim, da te v resnici zanima enostavno kako zapisati nekaj v pomnilnik _drugega_ procesa? Oz. če prav sumim, želiš z direktnim naslavljanjem doseči pomnilniško lokacijo drugega procesa?
verjetno si računal na nekaj v stilu:
xor %al, %al ; postavi reg.al na nič
movb %al, (%esi); zapiši vrednost al na naslov vsebovan v esi, ki kaže nekam daleč v drug proces ...
V večini OS, tudi Windows, to NE bo šlo, med drugim, iz dveh razlogov :
1. Vsak uporabniški (ni del jedra) proces ima preslikan naslovni prostor (kos pomnilnika), ki izgleda enako v vseg procesih (se, recimo, začne na naslovu 0, potem je razdeljen enako za različne stvari itd.). Po domače, tvoj &H00000 je v enem procesu v resnici fizično drug naslov kot v nekem drugem. Tudi če bi naslavljal absolutne naslove, bi še vedno naslavljal lasten pomnilniški prostor - ne reče se _virtualni_ pomnilnik kar tako brez veze ;)
2. Znotraj procesa je dovoljeno naslavljanje samo lastnega kosa pomnilnika. Poizkus pisanja izven tega dela naslovnega prostora bo sprožil past (exception) - najverjetneje legendarni "Page Fault", nakar OS, tvoj proces ubije (ker nima smisla nadaljevati, tvoj proces se itak NE more več nadaljevati pravilno).
Obe omejitvi izvaja MMU enota procesorja, ki je sprogramirana s strani OS v posebnem zaščitenem načinu ob zagonu. Za vse praktične potrebe programerja up. aplikacij, je ta omejitev... hardverska.
Kratka verzija: pisanje uporabniškega procesa v nasl prostor drugega up. procesa, praktično gledano, ni možno.
(opomba: pazi na terminologijo - recimo nit je s stališča procesiranja podobna stvar kot proces, vendar si niti enega procesa delijo isti nasl prostor.)
Predlagam, da pozornost preusmeriš v nek način medprocesne komunikacije (IPC - inter-process communication), kjer en proces drugemu sporoči naj "spremeni stanje". To je tudi enostavnejši, boljši način.
verjetno si računal na nekaj v stilu:
xor %al, %al ; postavi reg.al na nič
movb %al, (%esi); zapiši vrednost al na naslov vsebovan v esi, ki kaže nekam daleč v drug proces ...
V večini OS, tudi Windows, to NE bo šlo, med drugim, iz dveh razlogov :
1. Vsak uporabniški (ni del jedra) proces ima preslikan naslovni prostor (kos pomnilnika), ki izgleda enako v vseg procesih (se, recimo, začne na naslovu 0, potem je razdeljen enako za različne stvari itd.). Po domače, tvoj &H00000 je v enem procesu v resnici fizično drug naslov kot v nekem drugem. Tudi če bi naslavljal absolutne naslove, bi še vedno naslavljal lasten pomnilniški prostor - ne reče se _virtualni_ pomnilnik kar tako brez veze ;)
2. Znotraj procesa je dovoljeno naslavljanje samo lastnega kosa pomnilnika. Poizkus pisanja izven tega dela naslovnega prostora bo sprožil past (exception) - najverjetneje legendarni "Page Fault", nakar OS, tvoj proces ubije (ker nima smisla nadaljevati, tvoj proces se itak NE more več nadaljevati pravilno).
Obe omejitvi izvaja MMU enota procesorja, ki je sprogramirana s strani OS v posebnem zaščitenem načinu ob zagonu. Za vse praktične potrebe programerja up. aplikacij, je ta omejitev... hardverska.
Kratka verzija: pisanje uporabniškega procesa v nasl prostor drugega up. procesa, praktično gledano, ni možno.
(opomba: pazi na terminologijo - recimo nit je s stališča procesiranja podobna stvar kot proces, vendar si niti enega procesa delijo isti nasl prostor.)
Predlagam, da pozornost preusmeriš v nek način medprocesne komunikacije (IPC - inter-process communication), kjer en proces drugemu sporoči naj "spremeni stanje". To je tudi enostavnejši, boljši način.
/\/\.K.
Zgodovina sprememb…
- spremenil: Matako ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Opera: drsnikom na spletnih straneh bo odklenkalo (strani: 1 2 )Oddelek: Novice / Omrežja / internet | 22900 (18595) | enadvatri |
» | Pomnilnik v Windows: 2. delOddelek: Novice / Apple iPhone/iPad/iPod | 6493 (4566) | Jst |
» | Odkrita ranljivost v Flashu omogoča pridobitev sistemskih privilegijevOddelek: Novice / Varnost | 5766 (3666) | fiction |
» | Dell za 4.600 evrov nudi računalnik za (interaktivno) zabavo - XPS 720 H2COddelek: Novice / Modifikacije | 5364 (3941) | MrStein |
» | [C#.net] kako vnesti vrednost direktno v pomnilnik?Oddelek: Programiranje | 1378 (1039) | Reliant2 |