Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 22 Agosto 2010, 20:27 pm



Título: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Karcrack en 22 Agosto 2010, 20:27 pm
Código
  1. '---------------------------------------------------------------------------------------
  2. ' Module    : cFastSqr
  3. ' Author    : Karcrack
  4. ' Now       : 22/08/2010 20:25
  5. ' Purpose   : Fast alternative for Integer Sqr
  6. ' History   : 22/08/2010 First cut .........................................................
  7. '---------------------------------------------------------------------------------------
  8.  
  9. Option Explicit
  10. Private sCode       As String
  11.  
  12. 'NTDLL
  13. Private Declare Sub RtlMoveMemory Lib "NTDLL" (Destination As Any, Source As Any, ByVal Length As Long)
  14.  
  15. Public Function FastSqr(ByVal lValue As Long) As Long
  16.    ' Filled with ASM later
  17. End Function
  18.  
  19. Private Sub Class_Initialize()
  20.    Dim sCode       As String
  21.    Dim lPtr        As Long
  22.  
  23.    sCode = ChrW$(&H548B) & ChrW$(&HC24) & ChrW$(&H448B) & ChrW$(&H824) & ChrW$(&HFF2) & ChrW$(&HC02A) & ChrW$(&HFF2) & ChrW$(&HC051) & ChrW$(&HFF2) & ChrW$(&HC02D) & ChrW$(&H289) & ChrW$(&HC031) & ChrW$(&HCC2) & ChrW$(&H0)
  24.  
  25.    Call RtlMoveMemory(lPtr, ByVal ObjPtr(Me), 4)
  26.    Call RtlMoveMemory(ByVal lPtr + &H1C, StrPtr(sCode), 4)
  27. End Sub
Codigo ASM utilizado:
Código:
http://karcrack.pastebin.com/CLSZPR5d

Para calcular el rendimiento:
Código:
Sub Main()
    Dim cFS         As New cFastSqr
    Dim cT          As New CTiming
    Dim i           As Long
    Dim x           As Long
   
    cT.Reset
    For i = 1 To 10000000
        x = cFS.FastSqr(i)
    Next i
    MsgBox cT.sElapsed
   
    cT.Reset
    For i = 1 To 10000000
        x = CLng(Sqr(i))
    Next i
    MsgBox cT.sElapsed
End Sub

Es aproximadamente el doble de rapida en el calculo de Raices enteras :)

Saludos ;)


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Psyke1 en 23 Agosto 2010, 15:19 pm
Dudas:
1.-Porque FastSqr esta vacio?
2.-Porque haces un clase para una sola funcion?¿

Gracias!

DoEvents¡! :P


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Novlucker en 23 Agosto 2010, 15:21 pm
1- Lo dice en el propio código
 'Filled with ASM later
:http://karcrack.pastebin.com/CLSZPR5d
2- Supongo que viene por lo de los retos, y buscar la manera más rápida de realizar una operación.

Saludos


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Karcrack en 23 Agosto 2010, 15:42 pm
Es una de las formas de ejecutar codigo ASM, la mas rapida.

Se utiliza una clase, y como cada objeto en VB6 tiene una vTable, donde estan los punteros de las funciones, lo que se hace es añadir la funcion, y cuando la clase se inicializa se cambia el puntero a nuestro codigo en ASM, asi que cuando se llame a ese funcion en realidad se salta al codigo ASM :D

Estoy haciendo un tutorial de como ejecutar codigo ASM en VB... a ver si lo acabo, que es un tema muy interesante ;)


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Psyke1 en 23 Agosto 2010, 16:22 pm
Gracias a ambos! ;)
Si Karcrack, me interesa mucho ese tuto!! ;-)

DoEvents¡! :P


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Tokes en 23 Agosto 2010, 18:38 pm
¡Karcrack, por favor termínalo! ¡Por favooooooooooooor!

            Gracias.


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Karcrack en 24 Agosto 2010, 20:00 pm
Bueno, ahora mismo he retomado la escritura del tuto y tengo una mala noticia para algunos... he decidido reescribir el tuto en Ingles... espero que no suponga mucha dificultad usar el traductor de Google :P

He aqui el indice para los impacientes :laugh:
Código:
Summary:

 1.Brief introduction
 2.What should I know before reading this paper?
 3.Loading code onto the memory.
   1.Single variables.
   2.Arrays.
   3.Strings.
 4.Executing the code:
   1.CallWindowProcA/W()
   2.Virtual Function Table (VFT) patch
   3.Zombie_AddRef() or Zombie_ReleaseRef()
   4.__vbaGoSubReturn()
 5.Thanks and References


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Psyke1 en 24 Agosto 2010, 20:52 pm
Perfecto  ;-)
Nah, el inglés no es problema, o si no le pido ayuda a mi primo (http://foro.elhacker.net/programacion_visual_basic/error_copymemory_y_estructura_safearray_via_api-t302895.0.html;msg1503010#msg1503010)... :laugh: :laugh: :laugh: :laugh:
Tienes alguna fecha aproximada de publicacion?¿
Gracias

DoEvents¡! :P


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: Karcrack en 24 Agosto 2010, 23:58 pm
Tienes alguna fecha aproximada de publicacion?¿
Bueno, me gustaria tenerlo para antes de Septiembre, si no es posible estara para la primera semana ;)

Tu tranki que tu primo seguro que se las arregla :laugh:


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: xmbeat92 en 25 Agosto 2010, 05:27 am
Bueno, ahora mismo he retomado la escritura del tuto y tengo una mala noticia para algunos... he decidido reescribir el tuto en Ingles... espero que no suponga mucha dificultad usar el traductor de Google :P

He aqui el indice para los impacientes :laugh:
Código:
Summary:

 1.Brief introduction
 2.What should I know before reading this paper?
 3.Loading code onto the memory.
   1.Single variables.
   2.Arrays.
   3.Strings.
 4.Executing the code:
   1.CallWindowProcA/W()
   2.Virtual Function Table (VFT) patch
   3.Zombie_AddRef() or Zombie_ReleaseRef()
   4.__vbaGoSubReturn()
 5.Thanks and References
me va a interesar mucho ese tuto!!!
Aunque este en ingles....(parte del cuerpo en que se unen el muslo con el torso)


Título: Re: [VB6+ASM] FastSqr - Clase para hacer raices enteras raaapidamente ;D
Publicado por: LeandroA en 25 Agosto 2010, 05:31 am
uu buenisimo un tuto de eso, asi porlomenos estamos un poco al tanto, porque no entiendo nada, esta bueno para la parte grafica ya que asm es muy rapido. despues tengo que hacerte una pregunta al respecto con un modulo clase de ActiveVB para subclasificar (utiliza ASM)

saludos.