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

Pozivanje procedure eksternog procesa (drugog programa)

[es] :: Pascal / Delphi / Kylix :: Pozivanje procedure eksternog procesa (drugog programa)

[ Pregleda: 3005 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
79.101.231.*

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Pozivanje procedure eksternog procesa (drugog programa)07.12.2008. u 16:36 - pre 187 meseci
U poslednjih par dana sam prekopao net uzduz i popreko, i vise ne znam ni sta da trazim. Evo objasnjenja sta mi je potrebno...

Recimo da imamo neki program (proces) koji ima vise "ekrana". Kad se program startuje, prikaze se pocetni ekran. Korisnik pritisne "enter", ucita se neka slika sa diska, i otvori se drugi ekran sa tom slikom... Ako mi tu sliku sad nadjemo na disku i promenimo je, u programu i dalje stoji stara slika jer je ona u memoriji, dok se ne ucita nova (program je sve vreme aktivan). Novu mozemo videti ako se vratimo jedan korak (ekran) nazad, pa ponovo napred na drugi ekran - prilikom ovog prelaska program ucitava sliku ponovo.

E sad, ono sto mene zanima, ako znam ID procesa, mogu da citam iz njegove memorije u da u nju pisem, kako da naknadno "okinem" ponovno ucitavanje slike, sto program radi prilikom prelaska sa prvog na drugi ekran (ili par "ekrana" ranije), a da ostanem tu gde jesam (na drugom ekranu)?

Isto ako je u pitanju broj koji se nalazi u memoriji procesa, program broj ucita i ispise, ja ga onda promenim u samoj memoriji, i kako onda da nalozim programu da ponovo ucita (izmenjeni) broj?

Koristio sam programe IDA i OllyDbg ne bih li nasao nesto u asembleru, ali obzirom da asembler tek upoznajem i znam tek neke osnovne stvari, nisam se bas usrecio. Preko WinAPIOverride32 ne znam sta tacno da trazim kad namestim da se prati izvrsavanje procesa, koristio sam i EasyHook 2.5 i ProcessMonitor, ali ista prica - puno podataka, a ja ne znam sta trazim.

Da li je ovo uopste moguce - nekako "usnimiti" sta se desava u programu u odredjenom trenutku, uhvatiti poziv odredjene procedure, pa kasnije to reprodukovati? Mislim, znam da sigurno jeste, ali koliko je komplikovano? Mora li se prckati po asembleru, ili je dovoljan WinAPI i njegove poruke, njihovo "hvatanje" (da bi znali sta nam treba) i kasnije ponovno slanje procesu (da ponovi ucitavanje)?

Znaci, u kodu imam proceduru za upis npr. broja na neku adresu memorije aktivnog procesa (nekog), kako da nakon toga procesu posaljem poruku da ponovo ucita taj broj u promenjivu gde on inace ide? Kao "izmena + refresh" promenljive :)

Svaka pomoc je dobrodosla, makar bile to i samo smernice na sta da obratim paznju, jer ne znam vise u kom smeru da idem - assembler, API, biblioteke (.dll), nesto trece...? :)
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.dynamic.sbb.rs.



+62 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)07.12.2008. u 23:15 - pre 187 meseci
BugA, resenje si vec nasao: poruka.

1) Recimo da je tvoja aplikacija single proces. Aplikacija ima vise formi, od kojih neke (recimo) "hvataju" slike; sve njih opsluzuje jedan proces i jedan (main) thread.
2) Proceduru za ucitavanje slike na formu pises u istoj toj formi (kao metodu). Takodje, sve podatke potrebne da se ponovo ucita ta slika (naziv fajla, varijabla/adresa podatka, bilo sta) memorises takodje u formu (recimo kroz prepravljen konstruktor od forme)
3) Deklarises svoj tip poruke, zapravo message_ID (vidi WM_USER u helpu).
4) U formi napises handler za taj tip poruke, koji upravo poziva metod za reload slike; posto sve podatke vec sadrzi sama forma, metod ne trazi parametre.
5) Kad se negde u aplikaciji promeni podatak/slika koji je sadrzan u "drugoj/trecoj" formi (kako ti kazes: ekranu), toj formi se posalje message sa tim message_ID-om (vidi SendMessage() ili PostMessage() u API helpu). Handler forme uhvati poruku i odradi ponovno ucitavanje slike/podatka.
6) E da, prvi argument HWnd za poziv SendMessage() je upravo property Handle od forme; taj property imaju svi TWinControl objekti (TForm je descendent/naslednik ovog u trecem/cetvrtom kolenu :) ).

Ako ima jos nesto a da nisam video/razumeo, pitaj... mozda je cela prica dosta slozenija?

Rajko
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 00:10 - pre 187 meseci
Ako sam dobro shvatio, nemaš kontrolu nad tim programom niti njegov kod. Za početak pokušaj najjednostavnije rešenje, simuliranje povratka na ekran gde se slika učitava i vraćanja na trenutni, kao da to radi sam korisnik. Ako se kretanje kroz te ekrane koriste buttoni onda možeš slati WM_COMMAND poruke sa odgovarajućim parametrima ili možeš simulirati pritisak na miš ili tastaturu. Pogledaj u WinSightu ili Spy++ koje sve poruke i sa kojim parametrima se šalju datom programu kada se ručno kreće kroz program.
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
93.86.188.*

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 09:58 - pre 187 meseci
Rajko, na zalost, u pitanju jeste dosta slozenija prica, moguce da nisam bio dovoljno jasan. Da je na meni da programiram i aplikaciju koja poruku treba da primi, za to ne bi bilo problema, ovako sam se malo pogubio. Ipak hvala na trudu za objasnjenje :)

Kao sto savkic rece, ja nemam nikakvu kontrolu nad programom, niti pristup kodu. U pitanju je igra, tj. full-screen DirectX aplikacija, zbog toga sam i pominjao gore one programe za debug, disassemble i monitoring procesa.

Sto se tice simuliranja rada korisnika to je prvo sto mi je palo na pamet, ali je dosta neprakticno... Kod jednog vracanja i `ajde nekako, ali kad se treba vratiti unazad vise formi, nastaje problem - potrebno je vreme dok program ucita svaku formu, a ako se taster pritisne u medjuvremenu, on ga iskulira. Drugo, u zavisnosti od toga gde se kursor trenutno nalazi, zavisi i koje dugme treba pritisnuti da se ide napred/nazad kroz menije, nije uvek isto. I trece, morao bih da vidim za koje vreme mogu proslediti sledece "pritiskanje", jer ako se bas brzo ispritiskaju dugmici na tastaturi, program uhvati samo prvih par pritiskanja, a ostalo iskulira - bojim se da ce se to desiti i sa prosledjenim pritiskanjem, ako prosledim sve jedno za drugim bez pauze (ili nece?)

Nisam to zeleo na ovaj nacin da resim, ali ako se ne nadje neko elegantnije resenje, ovo mi uvek stoji kao solucija, to bar nije problem da se napravi :)

Pomenuta dva programa jos nisam probao, pokusacu s njima da vidim sta se desava. Pokusavao sam ja vec sa onim gorepomenutim programima, lepo pokrenem igru, dodjem gde treba, pritisnem "enter" i gledam sta se desava. Problem je taj sto ne znam sta tacno da gledam - dok jedan program daje meni previse informacije, drugi je nedorecen.

Odoh da probam sa ovim programima, pa javljam...

EDIT: WinSight nisam nasao... Da li si mislio na "Deltec wInsight"? Probao sam preko Spy++ (nisam ni znao da je on u sastavu Visual Studio-a :). Ovo su poruke koje se salju pritiskom na taster "enter" na odredjenom ekranu igre:

Code:

<00208> 01F00514 P WM_KEYDOWN nVirtKey:VK_RETURN cRepeat:1 ScanCode:1C fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:0000000D lParam:001C0001]
<00209> 01F00514 P WM_CHAR chCharCode:'13' (13) cRepeat:1 ScanCode:1C fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:0000000D lParam:001C0001]
<00210> 01F00514 P WM_KEYUP nVirtKey:VK_RETURN cRepeat:1 ScanCode:1C fExtended:0 fAltDown:0 fRepeat:1 fUp:1 [wParam:0000000D lParam:C01C0001]


Proverio sam par puta, to je to. Ova prva brojka u <> zagradi je nebitna, to je redni broj poruke u log fajlu.

E sad, nisam siguran koliko mi ovo znaci, obzirom da nije vezano za izbor - npr. i kod izbora opcije 1 i kod izbora opcije 2 salje se ista ova poruka (poruke), a proverio sam vec ranije da igra u ta dva slucaja ucitava razlicite slike. Kako da nadjem sta se desava nakon slanja ove poruke, koji se parametri i odakle pozivaju, da bi njih mogao da menjam, da posaljem ovu poruku, ali sa odredjenim parametrima...?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 10:41 - pre 187 meseci
> EDIT: WinSight nisam nasao... Da li si mislio na "Deltec wInsight"?

Ne, na WinSight koji dolazi uz Delphi (i Builder).


> E sad, nisam siguran koliko mi ovo znaci, obzirom da nije vezano za izbor - npr. i kod izbora opcije 1 i kod izbora opcije 2 salje se ista ova poruka (poruke),

Pritisak na enter će se proslediti buttonu sa fokusom (ili default buttonu ako postoji). Potraži WM_COMMAND i BN_CLICKED poruke u MSDNu, ako su u pitanju regularni buttoni one su ti dovoljne.

> a proverio sam vec ranije da igra u ta dva slucaja ucitava razlicite slike. Kako da nadjem sta se desava nakon slanja ove poruke, koji se
> parametri i odakle pozivaju, da bi njih mogao da menjam, da posaljem ovu poruku, ali sa odredjenim parametrima...?

Ako misliš koje funkcije se pozivaju u datom programu itd, za to ti trebaju specijalizovani disassembler programi, sa tim stvarima nisam radio i ne mogu ti konkretno pomoći, možeš pitati u C++ grupi.
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
93.86.58.*

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 11:56 - pre 187 meseci
Nasao sam WinSight, o muko... :))

Kako da nadjem koji "button" ima fokus u fulscreen DirectX aplikaciji, tj. koji je idButton od BN_CLICKED? U stvari, da li to uopste i mogu da nadjem, obzirom da ni WinSight32 ni Spy++ ne hvataju niti BN_CLICKED, niti WM_COMMAND...? Kada se pritisne enter, posalju se samo one tri poruke za pritisak tastera enter, i to je to. Ne znam bas kako ide ovo slanje poruka unutar DirectX-a :/

Imam ja specijalizovane disassembler programe (OllyDbg, IDA), nego sto nema ko da ih koristi, tek se ucim :)

Dal` da postavim ovu temu u "C++", ili "Assembler" podforum...?

Pitanje za one koji su radili sa assemblerom - da li mogu nekako iz jednog programa (svog programa) poslati poruku (ili sta god) sto ce drugi program (fullscreen directx aplikaciju) naterati da skoci na odredjeni deo svog koda, kao da "umetnem" neki uslovni skok u kod drugog programa, a da to ne uradim direktno u samom (drugom) programu, menjajuci njegov kod, nego u toku izvrsavanja da se desi skok ako je uslov ispunjen (tipa - ako je pritisnut taster "1", ponovi deo programa koji se izvrsava prilikom ucitavanja ekrana 2)?
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
79.101.149.*



+31 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 20:57 - pre 187 meseci
Mozes iz ollija da menjas kod. a tako nece moci.
To sto si ti zamislio nece bas lako da profunkcionise jer jedna od osnovnih fazona zastite sotvera je da se on sam raspakuje negde u memoriji te se tek onda izvrsava, no to je cela filozofija "Rat" za sebe.
Poruke meozes da saljes bez problema sa sendmassege, Navatas prvo Handle datog prozora pa onda send sta ti treba.
Kako to mislis da se vratis korak unazad.
Mada probaj da prevaris program ako nije po necemu vazna slika.
Iz cele ove tvoje price u opste nisam ukapirao sta ti zapravo stvarno hoces.
Opisi tacno sta zeleis da uradis i sta radis da bi promenio sliku, i cemu ti sluzi.
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
93.86.58.*

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 21:19 - pre 187 meseci
Ma ja znam da mogu, i iz Olly-ja i iz IDA-e, ali ne znam bas sta da menjam... a nekako mislim da je i protivzakonito, pa ne bih bas :))

Nisam bas razumeo ovo oko "Rat" filozofije...?

Poruke mi ne zavrsavaju posao, rekoh sta se salje od poruka, ali ne treba mi to, vec parametri koji se prosledjuju procesu, tj. proceduri koja se okida na slanje poruke u datom trenutku. To je problem.

Sta kako mislim da vratim korak unazad, sad ja tebe nisam razumeo :)) Aha, sad sam video... Pa kreces se kroz meni, stisnes enter i ides na sledeci meni (tj. promeni se ceo ekran), i tad program ucita neku grafiku sa diska. Ja tada npr. spustim program (alt + tab) odem i izmenim tu sliku, i vratim se u program, ali slika je ista ona stara, jer je ona trenutno u memoriji. Ako se vratim na prethodni meni (prethodni ekran, korak nazad, pritisnem ESC), pa opet idem napred na ekran gde je grafika (opet pritisnem enter), sada je tu slika koju sam ja ubacio. Ono sto meni treba je da okinem refresh slike a da ne idem peske nazad-napred, niti mi zavrsava posao simulacija pritiskanja tastera, objasnio sam iznad i zasto.

Kako mislis da prevarim program? Sve sto meni treba jeste refresh kad ja zelim, ni manje, ni vise od toga.

Evo primera - program dozvoljava da imas dve slike, koje ucitava sa npr. 'C:\slike', i one se zovu 'slika1' i 'slika2'. Shodno onome sto izaberes na jednom ekranu, kada odes dalje (sledeci ekran, pritisnes enter) vidis sliku koju si izabrao. E sad, ako ja napravim program koji ce npr. na pritisak odredjenog tastera izmeniti tu sliku (neku drugu sliku snimi na isto mesto kao 'slika1') potrebno mi je da iz svog programa okinem program koji tu sliku prikazuje da se ona ponovo ucita. Program sam ucitava sliku po izboru odredjene opcije i smesta je u memoriju. Kako da nakon toga ja tu sliku promenim, a da se ne vracam jedan meni unazad, na izbor slike...?

Sam sam sebe vise zbunio, ali mi je samo to potrebno - okinuti odredjenu proceduru programa, sa odredjenim parametrima, mada ako neko ima drugaciju ideju, slusam :)

 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
93.86.187.*



+31 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)08.12.2008. u 22:05 - pre 187 meseci
Tesko da to mozes da uradis, a da ne menjas kod orginalnog programa, a znamo da se to nesme .
Mogu da ti pokazem kako da nalepis sliku tamo gde zelis ali neces da izazoves izvrsenje programa odnosno zeljene procedure tako da ne znam koliko bi ta slika stajala dugo na svom mestu.
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)09.12.2008. u 01:35 - pre 187 meseci
Citat:
((BugA)): Kako da nadjem koji "button" ima fokus u fulscreen DirectX aplikaciji ... Ne znam bas kako ide ovo slanje poruka unutar DirectX-a

Slanje poruka unutar DirectX ne ide nikako. Poruke o kojima se ovde govori su poruke za Windows GUI. Jedini prozor koji imas u DirectX aplikaciji je onaj na kome se iscrtava igra. Nemas dugmice niti druge kontrole koje mogu imati fokus. Samo tom jednom prozoru mozes da saljes neke od poruka (one koje imaju smisla za klasu Window). Ako DirectX aplikacija ima dugmice (koji su zapravo slicice i nemaju nikakve veze sa Windows GUI dugmicima) po kojima mozes da klikces, mozes probati da ih "kliknes" porukama za pozicioniranje i kliktanje misem. DirectInput bi trebalo da uhvati ove poruke, da ih procesira i od njih napravi klik na dugme u aplikaciji.

Ovo sto ti hoces je mozda izvodljivo, ali su rezultati totalno nepredvidivi - greska je sto imas pretpostavku da je ucitavanje slike nezavistan proces od svega ostalog (npr kreiranja drugih DirectX tekstura za iscrtavanje). Cak i ako nadjes mesto gde pocinje ucitavanje slike (sto je relativno lako, treba da nadjes pozive funkcija CreateFile ili OpenFile), i uspes da vratis EPC na tu adresu - ko zna sta ce se jos dogoditi uz ucitavanje fajla (kreiranje duplikata drugih objekata, dodavanje duplikata tekstura u drvo za renderovanje i sl). To su stvari koje zavise od unutrasnje organizacije programa koji bi hteo da menjas a o kome ne znas apsolutno nista. Smeo bih da se opkladim da tako modifikovan program ne bi radio (ako bi uopste radio) duze od nekoliko prelazaka sa jednog ekrana na drugi.

Najkrace - sta god da radis, odustani, neces uspeti.

P.S. Koji program je u pitanju?
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
93.86.187.*

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)13.12.2008. u 10:00 - pre 187 meseci
Hladan tus realnosti, a? :)

obucina, u pitanju je "Pro Evolution Soccer 2009". Bio jednom jedan lik koji je po izlasku igre svasta nesto prchkao, izmislio "kitserver", program koji svasta nesto menja u igri tako sto patch-uje originalni .exe fajl, nalazuci mu da koristi jos par .dll-ova koje je taj lik pravio. E, sad se taj lik setio da ima i svoj zivot, i onda mrk :)

Ja da pitam, i ovo je zabranjeno? :) Verovatno jeste, cim on pacth-uje originalni .exe...

Salu na stranu, ovako ide postupak - ispred tebe je meni - izaberes jednu ekipu (enter - tad igra ucita dresove te ekipe), izaberes drugu ekipu (enter - ucitaju se dresovi druge ekipe i prelazi se na sledeci meni), na ekranu se prikazuju dva igraca u dresovima ekipa koje smo izabrali (ti dresovi su sad vec u memoriji). E sad... Onaj lik sa pocetka price je napravio da igra moze da "vuce" te dresove i sa odredjene lokacije sa diska, a ne samo iz svojih fajlova. Svaka ekipa ima dva kompleta dresova (home & away). Zadnjih par godina je pravio i da mozes da imas dresova koliko zelis, ali ovoga puta nije dotle stigao. Ja imam par (legalnih i krajnje prostih) ideja, ali mi samo treba nesto cime bih dok je igrac na tom ekranu (gde vidi dva fudbalera u dresovima) ponovo ucitao teksture dresova u slucaju da igrac zeli treci, cetvrti, n-ti komplet dresova, a da ne mora da se vraca nazad kroz meni, na ponovni izbor ekipa kako bi igra ponovo ucitala i dresove (ovoga puta neke druge, koje je igrac izabrao). To je ceo problem.

Hvala na pojasnjenju DirectX-a, i najkrace - ja ne odustajem ;) Nije mi ovo sad zivotna preokupacija, ali polako, kad imam vremena pomalo cu prchkati nesto, uciti se nekim stvarima, i ko zna. Nije meni sad ovo toliko bitno zbog same igre, vec pre svega sto bih kroz to nesto novo i naucio - nije mi bitan cilj, vec postupak kojim se do njega stize.

Ako ima jos ideja, slusam :)

Milane, zanimalo bi me da vidim kako se ubacjue ta slicica, nema veze sa ovim sto meni treba ali zvuci interesantno. Mozes mi pustiti PP ako mislis da ne bi valjalo ovde da pises :)
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
212.200.194.*



+31 Profil

icon Re: Pozivanje procedure eksternog procesa (drugog programa)13.12.2008. u 21:46 - pre 187 meseci
Evo ti ovako nesto.
Ucitaj sliku
Klikni na strelicu, prebaci na metu i pusti
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pozivanje procedure eksternog procesa (drugog programa)

[ Pregleda: 3005 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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