Página 1 de 2
Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 17:29
por AndresSalazer
Hola a todos anteriormente también publique cosas que después las termine resolviendo pero ahora necesito ayuda ya que me estanque y no puedo resolver esto , ..
Mis problemas son los siguientes necesito que mi Proyecto, lea un archivo dll lo mueva a temp y le haga LoadLibrary sugerencias de como podría hacerlo algun tutorial especifico alguna ayuda ?
Necesito que mi form -> Proyecto.exe al momento de abrirse estando la dll en la raíz del Proyecto es decir :
En la misma carpeta : Proyecto.exe , Midll.dll (Que la dll sea movida a temp) y se inyecte haciendo loadlibrary .
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 17:58
por Pink
Y porque no la cargas desde la raiz?
quieres inyectar la dll o solo cargarla?
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:07
por AndresSalazer
Pink escribió:Y porque no la cargas desde la raiz?
quieres inyectar la dll o solo cargarla?
Lo que me decis vos es hacer algo así ..
const
KE ='kernel32.dll';
LOAD ='LoadLibraryA';
procedure TForm1.FormCreate(Sender: TObject);
begin
//Aca declaro desde donde quiero hacer la Inyección en este caso C:
LoadLibrary(Pchar('C:/Mi dll.dll'));
hHandle:= GetModuleHandle(KE);
ADDLOAD:= DWORD(GetProcAddress(hHandle,LOAD));
end;
end;
Pero eso no es lo que necesito ..
Mi idea es la siguiente ejemplo :
en vB tengo un codigo que es asi y funciona bien ..
Try
Kill(My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
My.Computer.FileSystem.CopyFile(Application.StartupPath & "\Midll.dll", _
My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
X = LoadLibrary(My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
Y = GetProcAddress(X, "MyDLLFunc1")
Catch ex As Exception
My.Computer.FileSystem.CopyFile(Application.StartupPath & "\Midll.dll", _
My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
X = LoadLibrary(My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
Y = GetProcAddress(X, "MyDLLFunc1")
End Try
Pero no tengo idea de como hacer lo mismo en delphi , y lo necesito funcionando en delphi
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:17
por Pink
Pero a lo que me refiero que entonces la escribas si o si en temporales y usas [Enlace externo eliminado para invitados]
o podrias usar tambien
[Enlace externo eliminado para invitados]
y listo.
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:21
por AndresSalazer
Pink escribió:Pero a lo que me refiero que entonces la escribas si o si en temporales y usas
[Enlace externo eliminado para invitados]
y listo.
no aparece nada Content not found
SI el problema es que no se como inicializar el codigo para que la mueva a temp y haga el copyfile a temp y desde startuppath que es donde esta la dll con el proyecto la mueva e inyecte..
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:25
por Pink
Lo cargar una librería no es inyectar creo que tienes un mal concepto de inyección.
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:27
por orlando9427
Sería algo como esto, puede tener algunos errores en las llamadas a las APIs lo hice de memoria.
En sTemp esta la ruta Temp terminada en '\', obtienes un handle de la libreria cargada. Tienes una variable tipo funcion donde debe de estar tu declaración de la funcion en la DLL. Un ejemplo:
Declaracion en la DLL.
function MyDLLFunc1 (Param1: PChar): Integer; stdcall;
Tu variable se declara así
var fpMyFunc: function (Param1: PChar): Integer; stdcall;
Obtienes el puntero a esa funcion y la guardas en la variable. Todo completo queda así.
var hMod: HMODULE;
fpMiFunc: function (): Integer;
begin
hMod := LoadLibrary(PChar(sTemp + 'Mi Dll.dll'));
@fpMiFunc := GetProcAddress(hMod, 'MyDLLfunc1');
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:38
por Pink
Yo creo que te refieres a esto:
CopyFile(PChar('midll.dll'), PChar(GetTempDir + 'midll.dll'), true);
SetCurrentDirectory (Pchar(GetTempDir));
//ya aqui puedes hacer el loadlibrary y cargara la que esta en temp
//funcion para el tempdir
function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(SizeOf(Buffer) - 1, Buffer);
Result := StrPas(Buffer);
end;
saludos
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:39
por AndresSalazer
orlando9427 escribió:Sería algo como esto, puede tener algunos errores en las llamadas a las APIs lo hice de memoria.
En sTemp esta la ruta Temp terminada en '\', obtienes un handle de la libreria cargada. Tienes una variable tipo funcion donde debe de estar tu declaración de la funcion en la DLL. Un ejemplo:
Declaracion en la DLL.
function MyDLLFunc1 (Param1: PChar): Integer; stdcall;
Tu variable se declara así
var fpMyFunc: function (Param1: PChar): Integer; stdcall;
Obtienes el puntero a esa funcion y la guardas en la variable. Todo completo queda así.
var hMod: HMODULE;
fpMiFunc: function (): Integer;
begin
hMod := LoadLibrary(PChar(sTemp + 'Mi Dll.dll'));
@fpMiFunc := GetProcAddress(hMod, 'MyDLLfunc1');
Voy a probar todo esto y te digo como funciona yo estaba utilizando algo como esto .. pero no lograba hacer que funcione veremos si funciona lo que me dejaste!!
procedure TForm2.FormCreate(Sender: TObject);
var
dir: string;
TempPath: array[0..MAX_PATH - 1] of Char;
begin
GetTempPath(MAX_PATH, TempPath);
dir := GetCurrentDir;
CopyFile(PChar('GetCurrentDir\Midll.dll'),PChar('TempPath\Midll.dll'),TRUE);
end;
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:48
por AndresSalazer
Pink escribió:Yo creo que te refieres a esto:
CopyFile(PChar('midll.dll'), PChar(GetTempDir + 'midll.dll'), true);
SetCurrentDirectory (Pchar(GetTempDir));
//ya aqui puedes hacer el loadlibrary y cargara la que esta en temp
//funcion para el tempdir
function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(SizeOf(Buffer) - 1, Buffer);
Result := StrPas(Buffer);
end;
saludos
Pink sabes que tengo un problema al declarar estas variables ..
Result := StrPas(Buffer);
CopyFile(PChar('Midll.dll'), PChar(GetTempDir + 'Midll.dll'), true);
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 18:53
por Pink
Usa cualquier otra con tal y obtengas el tempdir. es que uso el delphi 7 quizas tienes otro.
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 19:00
por AndresSalazer
Pink escribió:Usa cualquier otra con tal y obtengas el tempdir. es que uso el delphi 7 quizas tienes otro.
No no , yo también tengo Delphi 7 , y también XE2 , XE3 pero el problema son esas 2 lineas nada mas!!
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 24 Jun 2013, 19:08
por Pink
que error te da?
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 25 Jun 2013, 01:41
por AndresSalazer
Hola Pink gracias por la ayuda prestada mira en estos momentos no me da ningún error hice un nuevo proyecto pero sabes que tengo un problema .. al momento de verificar donde se encuentran las dlls como podría hacer en un ..
Edit1.Text := SetCurrentDirectory (Pchar(GetTempDir2));
Edit2.Text := PChar(GetTempDir2 + 'midll.dll'), true);
Necesito saber la manera correcta con la sintaxys bien escrita de como chequear la ruta de
StartPath o sea donde tengo la dll y necesito verificar la ruta de %temp% gettempdir
Re: Duda mover archivo a temp y hacerle loadlibrary
Publicado: 25 Jun 2013, 01:53
por orlando9427
Si deseas revisar si un archivo existe usa la función FileExists.
function FileExists ( const FileName : string ) : Boolean;
Devuelve True si existe, False si no