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

Učitavanje exe iz res

[es] :: Pascal / Delphi / Kylix :: Učitavanje exe iz res

[ Pregleda: 1492 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mica99
Srbija

Član broj: 243749
Poruke: 90
*.dynamic.isp.telekom.rs.



+1 Profil

icon Učitavanje exe iz res25.06.2015. u 23:18 - pre 106 meseci
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?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Učitavanje exe iz res25.06.2015. u 23:51 - pre 106 meseci
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.
 
Odgovor na temu

mica99
Srbija

Član broj: 243749
Poruke: 90
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Učitavanje exe iz res29.06.2015. u 12:56 - pre 106 meseci
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;        


[Ovu poruku je menjao savkic dana 29.06.2015. u 14:23 GMT+1]
 
Odgovor na temu

mica99
Srbija

Član broj: 243749
Poruke: 90
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Učitavanje exe iz res29.06.2015. u 13:35 - pre 106 meseci
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]"
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Učitavanje exe iz res29.06.2015. u 13:35 - pre 106 meseci
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);


 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Učitavanje exe iz res29.06.2015. u 13:55 - pre 106 meseci
> Izvini ali nevidim sta si promenio u proceduri.

Dodao sam code tagove oko tvog primera kako bi tekst bio lakši za praćenje.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Učitavanje exe iz res

[ Pregleda: 1492 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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