Amigos alguien sabe como puedo emplear estas 2 funciones de ASM en .Net
Public Shared Function RotateLeftByVal(value As UInteger, ByVal count As UInteger)
Return (value << count) Or (value >> (32 - count))
End Function
Public Shared Function RotateRightByVal(ByVal value As UInteger, ByVal count As UInteger)
Return (value >> count) Or (value << (32 - count))
End Function
Tengo estas 2 funciones pero creo que no funcionan correctamente.. alguien que me pueda ayudar...
Thx
Para los que no sabemos ASM, ¿puedes mostrar el uso de las funciones originales (en ASM) y/o indicar que resultado esperas conseguir al llamar a cada función para poder darte una solución?
Saludos
Seguro bro
Aqui se explica como funcionan las 2 funciones ROR y ROL
http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2008_taller_de_asm-t208188.0.html
Quizá no te esté funcionando porque (según sé) en ASM las instrucciones ROR Y ROL regresan los bits desplazados nuevamente a la posición contraria de la variable y en .NET esos bits se descartan. Ejemplo al desplazar 2 bits:
ASM | VB.NET |
Bits originales: 11000011 | Bits originales: 11000011 |
Bits después del desplazamiento: 00001111 | Bits después del desplazamiento: 00000000 |
Hola Benjo,
Eso lo tengo claro el operador que hace esto es >> y el << que en ASM es SHL y SHR, los que digo yo hacen la rotacion circular (Shift Circular Rotation) encontre una funcion en un proyecto que despues podre pero con algunos funciona y con otros no...
De madre, estoy a punto de dejarlo y esperar...
Salu2 y GRacias
Para simular las funciones de rotación circulas la tienes realmente fácil y sólo necesitas crear una nueva variable para ello:
Public Shared Function RotateLeftByVal(value As UInteger, ByVal count As UInteger)
Dim VT as UInteger
VT = value
VT >> (32 - count)
value << count
value += VT
Return value
'Return (value << count) Or (value >> (32 - count))
End Function
Faltaría que modificaras la otra función.
El código no ha sido probado, pruébalo y nos dices si te ha servido. Saludos. ;D