Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 2.056 pregleda

Najnovija ↓

Učitavanje exe iz res 26.06.2015. u 00:18 · pre 138 meseci #1
Imam ovakav jedan slučaj;
U dll imam jedan exe fajl koji je u resource. U pitanju je putty koji je compajliran u dll kao res
Kako mogu da iz druge aplikacije učitam LoadLibrary i pokrenem putty u memoriju bez da ga ekstrktujem iz res-a?
Re: Učitavanje exe iz res 26.06.2015. u 00:51 · pre 138 meseci #2
Za izvrsavanje koda direktno iz memorije ti trebaju neke specijalizovane biblioteke, Delphi sam po sebi nema takvu mogućnost. Najbolje da potrazis na netu nesto na tu temu, ali imaj na umu da ce mnogi antivirusi neka od tih resenja tretirati kao maliciozni kod.
Moj ti je savet da prosto raspakujes exe u temp dir i da ga odatle startuje, isti efekat a daleko manje problema.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Učitavanje exe iz res 29.06.2015. u 13:56 · pre 138 meseci
izmenjeno 1 put, poslednji put savkic 29.06.2015. u 14:23
  1. savkic29.06.2015. u 14:23zapis iz teksta poruke
#3
Ok hvala na savetu. Odlucio sam da prvo ekstraktujem res i dll-a i tek onda da ga pokrenem ali mi nešto ne ideo od ruke.

Proceduru za ekstract imam u dll-u a procedu pozivam iz exe aplikacije. Kad ekstraktujem dobijem putty.exe od 0 bytes. Procedura je ok jer kad sam istu proceduru stavio u exe aplikaciju sve je radilo kako treba.

Code:

// Procedure u DLL-u 
procedure ExtractRes(ResName,ResType,ResPath:String);
var
  ResourceLocation: HRSRC;
  cFileHandle, cResourceDataHandle: THandle;
  cResourceSize, cBytesWritten: Longword;
  cResourcePointer: PChar;
begin
  ResourceLocation := FindResource(HInstance,PChar(ResName),PChar(ResType));
  cResourceSize := SizeofResource(HInstance,ResourceLocation);
  cResourceDataHandle := LoadResource(HInstance,ResourceLocation);
  cResourcePointer := LockResource(cResourceDataHandle);
  cFileHandle := CreateFile(PChar(ResPath),GENERIC_WRITE,FILE_SHARE_WRITE,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  WriteFile(cFileHandle, cResourcePointer^, cResourceSize,cBytesWritten,nil);
  CloseHandle(cFileHandle);
end;

Procedure Extract;
begin
  ExtractRes('putty', 'exe', 'putty.exe');
end;
  exports
   Extract;

// Procedura u EXE Aplikaciji

procedure Extract; stdcall; external moj.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
DLLHandle: THandle;
Trans: TTransferPtr;
begin

// Učitaj dll
   DLLHandle := LoadLibrary ('moj.dll');

    // Ako je uspešno učitavanje ...
     if DLLHandle <> 0 then Extract;
    else
        Showmessage('Greška je došlo pri učitavanju dll-a');
end;        
Re: Učitavanje exe iz res 29.06.2015. u 14:35 · pre 138 meseci #4
Izvini ali nevidim sta si promenio u proceduri.

Pitam jer vidim poruku "[Ovu poruku je menjao savkic dana 29.06.2015. u 14:23 GMT+1]"
Re: Učitavanje exe iz res 29.06.2015. u 14:35 · pre 138 meseci #5
Delphi ima TResourceStream sa kojim je lakše:

Code:

procedure ExtractRes(const AName: string; const APath: string);
var
  rs: TResourceStream;
begin
  try
    rs := TResourceStream.Create(hInstance, AName, RT_RCDATA);
    try
      rs.SaveToFile(APath);
    finally
      rs.Free;
    end;
  except
  end;
end;


Što se tiče tvog dela koda, proveri da li se hInstance koji koristiš odnosi na exe u kome ti se nalazi resurs ili na dll. A takodje možeš dodati i error handling što uglavnom javi grešku, npr:

Code:

  hRes := FindResource(HInstance, PChar(ResName), PChar(ResType));
  if hRes = 0 then
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), nil, MB_OK);

Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Učitavanje exe iz res 29.06.2015. u 14:55 · pre 138 meseci #6
> Izvini ali nevidim sta si promenio u proceduri.

Dodao sam code tagove oko tvog primera kako bi tekst bio lakši za praćenje.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme