[ tihi_20 @ 19.11.2006. 22:59 ] @
Ne znam da li je pravo pitanje za ovaj forum. Da li neko zna sta je "hook method" i kako se ovo tacno prevodi. Rec je o nekoj metodi kacenja. Hvala |
[ tihi_20 @ 19.11.2006. 22:59 ] @
[ Alter Ego @ 19.11.2006. 23:45 ] @
Trebalo je da navedeš u kom kontekstu se javlja. Prvo što mi pada na pamet je kod Template Method pattern-a gde označava operacije tj. metode nadklase koju podklase mogu a ne moraju da implementiraju (postoje još i primitivne operacije koje moraju da se implemetiraju i konkretne koje se implementiraju samo u nadklasi).
Evo šta kaže Google: Google: "http://www.site.uottawa.ca:4321/oose/index.html#hookmethod" Znači vrlo slično ovome što sam naveo samo malo uopštenije. [ tihi_20 @ 19.11.2006. 23:51 ] @
Smatram donji odgovor jako neozbiljan. Ako neko nesto ne zna ili ne razume nemoj ga potcenjivati.
[Ovu poruku je menjao tihi_20 dana 20.11.2006. u 22:03 GMT+1] [ Alter Ego @ 19.11.2006. 23:54 ] @
Pojasni malo situaciju :)
[ tihi_20 @ 20.11.2006. 00:17 ] @
Smatram donji odgovor jako neozbiljan. Ako neko nesto ne zna ili ne razume nemoj ga potcenjivati.
[Ovu poruku je menjao tihi_20 dana 20.11.2006. u 22:03 GMT+1] [ Alter Ego @ 20.11.2006. 00:38 ] @
E moraćete malo da sačekate dok bacimo pasulj ili tarot da nam se javi šta tačno ne razumete
![]() [ djalfirevic @ 21.11.2006. 15:09 ] @
Citat: tihi_20: Ne znam da li je pravo pitanje za ovaj forum. Da li neko zna sta je "hook method" i kako se ovo tacno prevodi. Rec je o nekoj metodi kacenja. Hvala Hooking metoda... Objasnicu ti na jednom jednostavnom primeru... Imas Logon screen Windows-ov, i sada hoces da napravis aplikaciju za skidanje sifri ljudima koji se recimo nalaze u jednom mreznom okruzenju. Napravis svoj GINA.DLL i napravis svoju verziju Logon screen-a. Zatim Hook-ujes Windows-ov Logon screen na svoj, tako da se prvo ucitava tvoj Logon screen, i korisnik lepo unese svoje korisnicko ime i lozinku, zatim mu ne prodje autentikacija, jer si ti to tako isprogramirao, da kada se prvi put unese korisnicko ime i lozinka, da se recimo kreira jedan tekstualni fajl i da se u njega smesta sadrzaj tekstualnih polja u koja se unose korisnicko ime i lozinka. Naravno, svi korisnici misle da su se slucajno zeznuli, te se automatski loguju drugi put ne razmisljajuci da su upravo otkrili svoje korisnicko ime i lozinku. Dao sam ti ovaj primer jer je ovo stvarno odradjeno, i radi. Dakle, hooking nije nista drugo nego pozivanje recimo windows-ovih ugradjenih API-ja. Nadam se da sam ti bio jasan. [ Au197/79 @ 21.11.2006. 22:44 ] @
Često programeri zamisle kako se nešto odvija, po koracima u nekom redosledu itd. Progrmer ne zna kako će konkretno izgledati svi ti koraci te će se neki proglasiti apstraktnim a metoda u kojoj se ti koraci pozivaju u tačnom rasporedu se zove Template method ili šablonska metoda. U konkretnoj situaciji će se naslediti ta klasa i svaki će se korak implementirati a šablonska metoda će ostati ista. Evo primera:
Code: public abstract class OpšteKuvanjeKafe { public final void skuvajKafu() { provriVodu(); kuvaj(); napuniŠoljice(); } abstract void kuvaj(); void provriVodu() { System.out.printl("Voda vri"); } void napuniŠoljice() { System.out.printl("Sipam u šoljice"); } } Metoda skuvajKafu je šablonska. Za svaku kafu se zna kako se voda provre i kako se šoljice pune, ali kako se kuva to zavisi od vrste kafe (turska itd.). Zato je metoda kuvaj apstraktna, njena implementacija će se dati u potklasi. Sad dolazimo do hook metoda. Metoda koja se poziva u šablonskoj metodi i ima neku trivijalnu implementaciju implementaciju koja ne radi ništa je hook metoda. Programer kad nasleđuje klasu može dati neku novu implementaciju toj metodi a ne mora. Kod apstraktnih metoda mora da da implementciju ili da tu klasu proglasi apstraktnom. Evo nadogradnja prošlog primera sa hook metodom. Postoje kafe kod kojih se obavezno dodaje neki dodatak a ima onih kod kojih se dodaje po želji: Code: public abstract class OpšteKuvanjeKafe { public final void skuvajKafu() { provriVodu(); kuvaj(); napuniŠoljice(); if (mušterijaTražiDodatak()) { dodajDodatak(); } } abstract void kuvaj(); void provriVodu() { System.out.printl("Voda vri"); } void napuniŠoljice() { System.out.printl("Sipam u šoljice"); } boolean mušterijaTražiDodatak() { return true; } } Metoda mušterijaTražiDodatak() je hook metoda. Ona samo vraća true i ako se ne redefiniše metoda dodajDodatak će se uvek izvršavati. A može se redefinisati da npr. pita mušteriju da li želi dodatak (kocka šećera, šlag...) može se redefinisati da vraća uvek false itd. Vrlo često hook metode nemaju nikakvu implementaciju samo { }. Takve su npr. metode klase Applet: init, start, stop, destroy... [ BurgerPera @ 28.05.2007. 10:53 ] @
Hooking:
Recimo hookujes MessageBox API. Kada neko pozove MessageBox funkciju prvo se izvrava tvoja funkcija, pa tek onda originalna... Pogledaj MS Detours biblioteku. Vrlo je jednostavna za koriscenje, pa mozes da isprobas i vidis sta se desava.... Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|