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

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

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

[ Pregleda: 1013 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Arandjelovic
Goran Arandjelovic
Beograd

Moderator
Član broj: 29116
Poruke: 274
*.139.eunet.yu.



Profil

icon Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 12:14

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?
25.12.2005. u 12:14 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 13:02
Š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.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
25.12.2005. u 13:02 

Dragi Tata

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

Sajt: www.novetehnologije.com


Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 15:34
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.
25.12.2005. u 15:34 

Goran Arandjelovic
Goran Arandjelovic
Beograd

Moderator
Član broj: 29116
Poruke: 274
*.27.eunet.yu.



Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 16:41
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.
25.12.2005. u 16:41 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 17:07
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...

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
25.12.2005. u 17:07 

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
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...
25.12.2005. u 18:12 

Dragi Tata

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

Sajt: www.novetehnologije.com


Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 18:35
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


25.12.2005. u 18:35 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 20:13
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]
FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
25.12.2005. u 20:13 

Goran Arandjelovic
Goran Arandjelovic
Beograd

Moderator
Član broj: 29116
Poruke: 274
*.233.EUnet.yu.



Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.25.12.2005. u 23:32
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.
25.12.2005. u 23:32 

Buffy
Stanko Culaja
za sada sam nezaposlen!
Sipovo,Republika Srpska

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

Sajt: www.sipovo.org


Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.26.12.2005. u 11:53
bolje je koristiti sokete nego datoteke za taj posao.
SAMO DA RATA NE BUDE,
LUDILA MEDJU LJUDIMA,
VELIKI NUDE ZABLUDE,
PLASE NAS RAZNIM CUDIMA
I SVAKOJ BAJCI NAUDE,
DA RATA NE BUDE.

Djordje Balasevic
26.12.2005. u 11:53 

yooyo
Centroid / Technical director

Član broj: 4891
Poruke: 1101
195.252.89.*



Profil

icon Re: Jedno trivijalno pitanje...znam adresu, želim pristup.28.12.2005. u 01:12
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
28.12.2005. u 01:12 

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

[ Pregleda: 1013 | Odgovora: 10 ]

Postavi temu Odgovori

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