Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Question Traduciendo código ASM a Delphi

Hola muy buen día a todos.

Estaba con un grupo de personas haciendo un programa y hubo una equivocación en una de las Dll, del error nos dimos cuenta
después porque no era muy llamativo, y ya no teníamos el código de la Dll.

Por ende alguien hizo una Dll en ASM (Usando RadAsm) para "Reparar" de una manera sencilla y practica el error en uno de los valores...
Sin embargo por motivos personales decidió dejar el proyecto, aunque dejando sus códigos.

Y bueno el código en asm funciona bien, yo no sé prácticamente nada de asm, por ende considere traducir el código de Asm a Delphi para
tener un poco más de control.

El código en Asm es similar al siguiente:::

Código:
 .386

.model flat,stdcall 
option casemap:none 
      include windows.inc 
include user32.inc 
include kernel32.inc 
includelib user32.lib 
includelib kernel32.lib
	  
	  Tarea1 PROTO
     
     .data
	 
	 Libreria		db	"DatosHWDER.dll",0
 Funcion1 db "Valor1_HWDER",0
	 Funcion2 db "Valor2_HWDER",0
	 
 .data?

.code
Punto_de_Inicio proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
	
	.IF (reason == DLL_PROCESS_ATTACH)
		mov eax,TRUE
		
		invoke CreateThread,NULL,NULL,ADDR Tarea1 ,NULL,NULL,NULL
		
		.ELSEIF (reason == DLL_PROCESS_DETACH)
		invoke ExitProcess, NULL
	.ENDIF
	ret
Punto_de_Inicio Endp

Tarea1 proc
LOCAL x:DWORD
LOCAL Aux1:DWORD
LOCAL Aux2:DWORD

	tecla:
	
 jz tecla
    
	invoke GetModuleHandle, addr Libreria
	invoke GetProcAddress, eax, addr Funcion1
	mov Aux1,eax
	
	invoke GetModuleHandle, addr Libreria
	invoke GetProcAddress, eax, addr Funcion2
	mov Aux2,eax
	
	mov esi,Aux2
	mov edi,Aux1
	mov ecx,96
	xor edx,edx
		
	.REPEAT

		mov dl, byte ptr [esi]
		mov byte ptr [edi],dl
		inc esi
		inc edi
		
	.UNTILCXZ
	
	jmp tecla
	
	ret

Tarea1 endp


End Punto_de_Inicio

Y con mi poca experiencia en Asm lo he intentado traducir un poco en Delphi:::

Código Delphi [-]
 library Project5;

uses
  Vcl.Dialogs,
  Windows;

var
 Funcion1:AnsiString;
  Funcion2:AnsiString;
  Libreria:AnsiString;
  Retorno: Cardinal;

procedure Reserved1();
   var
   Aux1rocedure;
   Aux2rocedure;

begin
  Aux1:= GetProcAddress(GetModuleHandleA(PAnsiChar(Libreria)), PAnsiChar(Funcion1));
  Aux2 := GetProcAddress(GetModuleHandleA(PAnsiChar(Libreria)), PAnsiChar(Funcion2));

while(true) do begin

asm

  mov esi,Aux2
  mov edi,Aux1

   end;

asm

  mov dl, byte ptr [esi]
  mov byte ptr [edi],dl
  inc esi
  inc edi

      end;
    end;
  end;

procedure DllMain(reason: Integer);
begin
  if reason = DLL_PROCESS_ATTACH then begin

  Funcion1 := 'Valor1_HWDER';
  Funcion2 := 'Valor2_HWDER';
  Libreria :=  'DatosHWDER.dll';

CreateThread(nil,0,Pointer(@Reserved1),nil,0,Retorno);

end;
end;

begin
 DllProc := DllMain;
 DllMain(DLL_PROCESS_ATTACH);
end.

Sin embargo al momento de compilar el código en RadAsm todo bien, la Dll funciona, pero cuando uso la Dll en Delphi no me resulta...

¿A qué se debe esto, he omitido algo en la traducción que hace que no ande?

De antemano, muchas gracias.
Responder Con Cita
  #2  
Antiguo 28-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por deliriun Ver Mensaje
... pero cuando uso la Dll en Delphi no me resulta...
Hola, ¿qué quiere decir "no me resulta"?
Responder Con Cita
  #3  
Antiguo 28-12-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hola, ¿qué quiere decir "no me resulta"?
Hola Casimiro, pues cuando cargo la Dll hecha en Delphi simplemente no efectúa su función, en resumen no hace aparentemente nada
Responder Con Cita
  #4  
Antiguo 29-12-2015
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 22
Osorio Va por buen camino
Sin profundizar en nada, por aqui se ve un ciclo infinito. Como para revisar.

Código Delphi [-]
while(true) do begin
Responder Con Cita
  #5  
Antiguo 29-12-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Osorio,

Si, supuse que el ciclo infinito era esto en ASM:::

Código:
.REPEAT

		mov dl, byte ptr [esi]
		mov byte ptr [edi],dl
		inc esi
		inc edi
		
	.UNTILCXZ
Responder Con Cita
  #6  
Antiguo 30-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola deliriun.
Cita:
Empezado por deliriun Ver Mensaje
...
Si, supuse que el ciclo infinito era esto en ASM:::
Código:
   .REPEAT

       mov dl, byte ptr [esi]
       mov byte ptr [edi],dl
       inc esi
       inc edi
		
   .UNTILCXZ
No se trata de un ciclo infinito, el registro CX entra con un valor decimal igual a 96 en la línea:
Código:
  ...
  mov ecx, 96  ; CX = 96
  ...
Mientras que la sentencia UNTILCXZ decrementa automáticamente el valor de CX en cada iteración, finalizando el ciclo cuando CX es igual a 0.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 30-12-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Una pregunta. ¿Para que quieres una dll que cambie en tiempo de ejecución valores de funciones o variables de un proceso?
Creo que si buscas ayuda deberías comentar con sinceridad tu problema, ten en cuenta que la ayuda que se te preste requiere un tiempo altruista para dedicarte. La ayuda en el foro se basa en la confianza mutua. El código que expones hace cosas que no son habituales, bueno, lo son en técnicas de hacking o craking.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
codigo de la vcl en delphi xe balger Varios 1 13-05-2011 11:03:58
Traduciendo lclstrconsts.pas Robert01 Lazarus, FreePascal, Kylix, etc. 6 12-02-2008 23:50:08
ANN: AnyNET-Delphi: Herramienta para generar codigo fuente Delphi desde :NET mamcx Noticias 7 21-05-2007 02:12:36
de codigo VB a codigo Delphi ingel Impresión 2 20-07-2004 14:15:44
codigo sql en delphi azaagh SQL 4 11-06-2004 18:15:55


La franja horaria es GMT +2. Ahora son las 11:15:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi