» »

[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.

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.
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

darkolord ::

(Lahko pa en svoj kos injectas v drug proces in potem tam šariš naprej)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Opera: drsnikom na spletnih straneh bo odklenkalo (strani: 1 2 )

Oddelek: Novice / Omrežja / internet
8122900 (18595) enadvatri
»

Pomnilnik v Windows: 2. del

Oddelek: Novice / Apple iPhone/iPad/iPod
356493 (4566) Jst
»

Odkrita ranljivost v Flashu omogoča pridobitev sistemskih privilegijev

Oddelek: Novice / Varnost
355766 (3666) fiction
»

Dell za 4.600 evrov nudi računalnik za (interaktivno) zabavo - XPS 720 H2C

Oddelek: Novice / Modifikacije
365364 (3941) MrStein
»

[C#.net] kako vnesti vrednost direktno v pomnilnik?

Oddelek: Programiranje
91378 (1039) Reliant2

Več podobnih tem