Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Jedno trivijalno pitanje...znam adresu, želim pristup.

[es] :: C/C++ programiranje :: Jedno trivijalno pitanje...znam adresu, želim pristup.

[ Pregleda: 3030 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.139.eunet.yu.



+9 Profil

icon Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 12:14 - pre 223 meseci
Jedan banalan primer:

Code:

#include <iostream>
using namespace std;

int main()
{
  int *x = new int;
  *x = 4;
  while(1){
    cout << x << " " << *x << endl;
  }
}


Dakle, znajući adresu promenljive, kako promeniti njenu vrednost iz drugog programa? Probao sam tako što sam adresu ručno dodelio int pokazivaču u drugom programu, a zatim probao da upišem vrednost (ili da pročitam) i nije mi uspelo.
O čemu se zapravo radi?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 13:02 - pre 223 meseci
Što se tiče zajedničkog pristupa *istom* parčetu memorije, Windows obezbeđuje:

CreateFileMapping() / CloseHandle()
MapViewOfFile() / UnmapViewOfFile()

I koliko mi je poznato, to je jedini ispravan način za baratanje takvim stvarima, a
drugi mi nisu poznati, a mozda su i nemogici, jer kad bi bili, svaki los program, koji
ima buffer overrun, bi unistio ceo OS.

Npr, u recniku koji sam radio, kao zajednicki deo memorije drzim HWND na glavni
prozor da bih mogao kasnije da mu saljem SendMessage() poruke. Tacno je da to
moze i sa FindWindow(), ali taj nacin ima i nekih nedostataka.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 15:34 - pre 223 meseci
Citat:
Goran Arandjelovic
Dakle, znajući adresu promenljive, kako promeniti njenu vrednost iz drugog programa? Probao sam tako što sam adresu ručno dodelio int pokazivaču u drugom programu, a zatim probao da upišem vrednost (ili da pročitam) i nije mi uspelo.
O čemu se zapravo radi?


Ne mere to tako ;) Kod većine modernih OS-ova, adresni prostor je ograničen na proces. Pročitaj malo o virtuelnoj memoriji. Ukratko, moraćeš da koristiš neki vid IPC-a da komuniciraš među procesima.
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.27.eunet.yu.



+9 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 16:41 - pre 223 meseci
Aha... pretpostavljam da sam dobro shvatio.. Zapravo, ova adresa koju dobijam i nije prava adresa te promenljive u fizičkoj memoriji već u virtualnoj memoriji tog procesa? Što će reći da pristupajući iz drugog programa ja zapravo pristupam ne toj, nego nekoj sasvim drugoj lokaciji... ispravite me ako grešim.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 17:07 - pre 223 meseci
Da, u pravu si. Ta adresa nije PRAVA za ceo adresni prostor, vec za proces...

To sa apsolutnim adresama je proslo vreme, koje je funkcionisalo koliko se secam
kod Commodore Amige...

Mala digresija:

Bilo je to srecno vreme hakerisanja.

U secanju su mi jos BOOT BLOCK LOADERI na Flopy diskovima za Amigi, koji su prvo
izvrsavali program za RASPAKIVANJE podataka sa flopija (lako je bilo pronaci ODAKLE
U MEMORIJI SE VRSI RASPAKIVANJE i u KOJOJ DUZINI), i na kraju, ti loaderi su imali
jedan obican JMP (jump) na apsolutnu adresu tih raspakovanih podataka...

Pa onda, stavimo BRAKEPOINT na taj JMP, i pocnemo da trazimo gde je TEXT introa,
itd...
 
Odgovor na temu

dejandj

Član broj: 92
Poruke: 3620
*.rcub.bg.ac.yu.



Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 18:12 - pre 223 meseci
Jedini pravi nacin da to "izvedes" je da vrednost promenljive upises u file i iz drugog je iscitas i posle izmene ili obrade upises ponovo u taj isti!

Mogu se pojaviti problemi sa sinhronizacijo na zalost ali se daju prevazici...
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 18:35 - pre 223 meseci
Citat:
dejandj: Jedini pravi nacin da to "izvedes" je da vrednost promenljive upises u file i iz drugog je iscitas i posle izmene ili obrade upises ponovo u taj isti!


Može i tako, ali postoje mnogo bolji vidovi komunikacije između procesa. Vidi recimo ovde poglavlja koja počinju sa IPC:

http://www.cs.cf.ac.uk/Dave/C/CE.html


 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 20:13 - pre 223 meseci
Citat:

Jedini pravi nacin da to "izvedes" je da vrednost promenljive upises u file i iz drugog
je iscitas i posle izmene ili obrade upises ponovo u taj isti!


Ne bih se slozio da je PRAVI nacin (mozda NAJLAKSI)... Po meni PRAVI nacin je sa:

CreateFileMapping()
MapViewOfFile()

a, ko je korisnik Microsoftovog C++ kompajlera, mislim da je postojala i neka
olaksana mogucnost preko makroa:

--- NETESTIRANO, A MISLIM DA JE NEKADA MOGLO U C++ BUILDERU ---
(sigurno nesto slicno ima za M$ C++)


#pragma data_seg(".NAZIV")
int neki_shared_broj;
#pragma data_seg()


pa u *.DEF:

SECTIONS
.NAZIV READ WRITE SHARED

ili u linkeru (ako nema DEF):

-SECTION:.NAZIV,rws

[Ovu poruku je menjao X Files dana 25.12.2005. u 21:14 GMT+1]
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.233.EUnet.yu.



+9 Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 23:32 - pre 223 meseci
Citat:
Dragi Tata: Može i tako, ali postoje mnogo bolji vidovi komunikacije između procesa. Vidi recimo ovde poglavlja koja počinju sa IPC:

http://www.cs.cf.ac.uk/Dave/C/CE.html


Joj, hvala na ovom linku. Naime, imam nešto o IPC-u na srpskom, ali je očajno objašnjeno, a ovde je dosta toga o sistemskom programiranju što sam nisam uspeo da nađem. Hvala.
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.26.12.2005. u 11:53 - pre 223 meseci
bolje je koristiti sokete nego datoteke za taj posao.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
195.252.89.*



Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.28.12.2005. u 01:12 - pre 223 meseci
Procitaj info u MSDN-u o funkcijama:
ReadProcessMemory
WriteProcessMemory

Ove dubugging funkcije koriste npr. razni run-time patcheri (ili crackovi). Startujes svoj loader program koji pokrene zeljenu aplikaciju, zatim je pauzira, izvrsi izmenu u memoriji procesa i pusti je dalje da radi.

yooyo
 
Odgovor na temu

[es] :: C/C++ programiranje :: Jedno trivijalno pitanje...znam adresu, želim pristup.

[ Pregleda: 3030 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.