[ BinaryRuler @ 02.06.2008. 21:45 ] @
Na koji nacin mogu da ugradim dll file u exe? Mozda da se ubaci u resource ili na neki drugi nacin? |
[ BinaryRuler @ 02.06.2008. 21:45 ] @
[ Eurora3D Team @ 03.06.2008. 00:41 ] @
Mozes preko resursa.
Da bi je procitao iz resursa i snimio na HD pozovi sledece win api fn (tim redom). Normalno , prvo proctaj kako se koriste ... GetModuleHandle(ako nemas handler),FindResource,LoadResource,LockResource,SizeofResource,CreateFile,WriteFile,CloseHandle(fajla). [ BinaryRuler @ 03.06.2008. 07:18 ] @
Ok, hvala na odgovoru, ali mene interesuje kako da koristim dll direktno bez snimanja na HDD?
[ icobh @ 03.06.2008. 08:54 ] @
Da li zelis da tvoj program samo nosi u sebi daj dll ili mu je on sastavni dio runtime-a?
Ako ne moze da radi bez njega, onda vidi Thinstall. A ako samo nosi u sebi, onda kao sto ti je vec preporuceno, strpaj ga u resource... [ deerbeer @ 03.06.2008. 08:55 ] @
Pogledaj ovde : http://www.joachim-bauch.de/tutorials/load_dll_memory.html
Imao sam slicnu situaciju da sam morao da snimim na HD pa onda da ucitam module koje raspakujem iz exe-a Ova biblioteka cita DLL iz samog EXE bez snimanja na HD ... [ Eurora3D Team @ 04.06.2008. 00:20 ] @
Citat: deerbeer: Pogledaj ovde : http://www.joachim-bauch.de/tutorials/load_dll_memory.html Imao sam slicnu situaciju da sam morao da snimim na HD pa onda da ucitam module koje raspakujem iz exe-a Ova biblioteka cita DLL iz samog EXE bez snimanja na HD ... Ovo sam ja koristio u jednom poslu ... trebalo je da se pokrene fajl zapisan u nizu (char*) u source fajlu ... U principu dobar kod , mada ... daleko od toga da ces moci komotno da pozivas funkcije iz dll-a u formatu funkcija(char* ovo,int ono); Kod ima jednu fn koja se zove, cini mi se, MemoryGetProcAddres kojom mozes da nadjes adresu procedure a posle bi najbolje bilo da koristis inline assembler (ako je VC++) tako sto argumente funkcije obrnutim redom (sa desna na levo) guras u stack i onda pozivas fn. Nesto kao Code: __asm{ push arg2 push arg1 call fn mov rezultat, eax // povratna vrednost je u eax registru } [ BinaryRuler @ 05.06.2008. 08:04 ] @
Uff, probacu.
Ako ima jos predloga pisite. [ deerbeer @ 05.06.2008. 09:00 ] @
Citat: Eurora3D Team: Ovo sam ja koristio u jednom poslu ... trebalo je da se pokrene fajl zapisan u nizu (char*) u source fajlu ... U principu dobar kod , mada ... daleko od toga da ces moci komotno da pozivas funkcije iz dll-a u formatu funkcija(char* ovo,int ono); Kod ima jednu fn koja se zove, cini mi se, MemoryGetProcAddres kojom mozes da nadjes adresu procedure a posle bi najbolje bilo da koristis inline assembler (ako je VC++) tako sto argumente funkcije obrnutim redom (sa desna na levo) guras u stack i onda pozivas fn. Nesto kao Code: __asm{ push arg2 push arg1 call fn mov rezultat, eax // povratna vrednost je u eax registru } Hvala za __asm al nisam jos dotle stigao .. Probao sam sa MemoryLoadLibrary i ne ide :( Code: HMEMORYMODULE hModule = MemoryLoadLibrary((const void*)szBuffer) ; BuildImportTable() funkcija u MemoryLoadLibrary vraca FALSE ... I cini mi se da je ovde negde problem Code: for (; !IsBadReadPtr(importDesc, sizeof(IMAGE_IMPORT_DESCRIPTOR)) && importDesc->Name; importDesc++) { DWORD *thunkRef, *funcRef; HMODULE handle = LoadLibrary((LPCTSTR)(codeBase + importDesc->Name)); //222 linija //handle je posle ovog poziva NULL //a u debugerru "codeBase + importDesc->Name" je KERNEL32.dll } module->modules[module->numModules++] = handle; if (importDesc->OriginalFirstThunk) { thunkRef = (DWORD *)(codeBase + importDesc->OriginalFirstThunk); funcRef = (DWORD *)(codeBase + importDesc->FirstThunk); } else { // no hint table thunkRef = (DWORD *)(codeBase + importDesc->FirstThunk); funcRef = (DWORD *)(codeBase + importDesc->FirstThunk); } for (; *thunkRef; thunkRef++, funcRef++) { if IMAGE_SNAP_BY_ORDINAL(*thunkRef) *funcRef = (DWORD)GetProcAddress(handle, (LPCSTR)IMAGE_ORDINAL(*thunkRef)); // 251 warning message else { PIMAGE_IMPORT_BY_NAME thunkData = (PIMAGE_IMPORT_BY_NAME)(codeBase + *thunkRef); *funcRef = (DWORD)GetProcAddress(handle, (LPCSTR)&thunkData->Name); //254 warning message } if (*funcRef == 0) { result = 0; break; } } return result ; Ovde je *funcRef == 0 i BuildImportTable vraca result = 0 Zanimljive poruke koje dobijam u output prozoru sa compiler warning porukama: 1>.\core\MemoryModule.cpp(251) : warning C4311: 'type cast' : pointer truncation from 'FARPROC' to 'DWORD' 1>.\core\MemoryModule.cpp(254) : warning C4311: 'type cast' : pointer truncation from 'FARPROC' to 'DWORD' i pored pragma direktive : // disable warnings about pointer <-> DWORD conversions #pragma warning( disable : 4311 4312 ) Da napomenem : Pre nego sto probam da otvorim DLL iz buffer-a pre toga ga snimim u fajl i ucitam ga sa LoadLibrary i radi normalno ... [Ovu poruku je menjao deerbeer dana 05.06.2008. u 12:44 GMT+1] [ Eurora3D Team @ 06.06.2008. 00:21 ] @
Nisam video da ste pisali od proslog puta ...
Radi sigurno , pogledacu kod mene... Secam se da sam te fajlove preradio da moze da ucita i exe (ustvari dll sam mislim i izbacio :) jer mi je trebao exe) [ BinaryRuler @ 08.06.2008. 21:41 ] @
Eurora3D ajde postuj kod ako mozes.
[ Eurora3D Team @ 09.06.2008. 21:24 ] @
Mogu ... bilo i obrisano
[Ovu poruku je menjao Eurora3D Team dana 10.06.2008. u 16:17 GMT+1] [ BinaryRuler @ 10.06.2008. 07:13 ] @
Hvala na upload-u
![]() [ deerbeer @ 10.06.2008. 10:30 ] @
@Eurora3D
Hvala puno ... evo mozes sad da skines sa sajta kod da te ne juri joachim :) :) Probacu pa cu javiti rezultate .... [ Eurora3D Team @ 11.06.2008. 01:27 ] @
Ma nista ... dodjete mi neki kod kad meni bude trebalo :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|