'---------------------------------------------------------------------------------------
' Module : cFastSqr
' Author : Karcrack
' Now : 22/08/2010 20:25
' Purpose : Fast alternative for Integer Sqr
' History : 22/08/2010 First cut .........................................................
'---------------------------------------------------------------------------------------
Option Explicit
Private sCode As String
'NTDLL
Private Declare Sub RtlMoveMemory Lib "NTDLL" (Destination As Any, Source As Any, ByVal Length As Long)
Public Function FastSqr(ByVal lValue As Long) As Long
' Filled with ASM later
End Function
Private Sub Class_Initialize()
Dim sCode As String
Dim lPtr As Long
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)
Call RtlMoveMemory(lPtr, ByVal ObjPtr(Me), 4)
Call RtlMoveMemory(ByVal lPtr + &H1C, StrPtr(sCode), 4)
End Sub
Codigo ASM utilizado:
http://karcrack.pastebin.com/CLSZPR5d
Para calcular el rendimiento:
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 ;)
Dudas:
1.-Porque FastSqr esta vacio?
2.-Porque haces un clase para una sola funcion?¿
Gracias!
DoEvents¡! :P
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
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 ;)
Gracias a ambos! ;)
Si Karcrack, me interesa mucho ese tuto!! ;-)
DoEvents¡! :P
¡Karcrack, por favor termínalo! ¡Por favooooooooooooor!
Gracias.
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:
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
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
Cita de: *PsYkE1* en 24 Agosto 2010, 20:52 PMTienes 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:
Cita de: 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:
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)
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.