Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TrashAmbishion en 1 Diciembre 2013, 19:21 PM

Título: Rotar Bits ( ROL ROR )
Publicado por: TrashAmbishion en 1 Diciembre 2013, 19:21 PM
Amigos alguien sabe como puedo emplear estas 2 funciones de ASM en .Net

Código (vbnet) [Seleccionar]


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
Título: Re: Rotar Bits ( ROL ROR )
Publicado por: Eleкtro en 1 Diciembre 2013, 19:34 PM
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
Título: Re: Rotar Bits ( ROL ROR )
Publicado por: TrashAmbishion en 1 Diciembre 2013, 19:41 PM
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
Título: Re: Rotar Bits ( ROL ROR )
Publicado por: El Benjo en 3 Diciembre 2013, 20:55 PM
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:





ASMVB.NET
Bits originales: 11000011Bits originales: 11000011
Bits después del desplazamiento: 00001111Bits después del desplazamiento: 00000000
Título: Re: Rotar Bits ( ROL ROR )
Publicado por: TrashAmbishion en 4 Diciembre 2013, 01:30 AM
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
Título: Re: Rotar Bits ( ROL ROR )
Publicado por: El Benjo en 5 Diciembre 2013, 21:48 PM
Para simular las funciones de rotación circulas la tienes realmente fácil y sólo necesitas crear una nueva variable para ello:

Código (vbnet) [Seleccionar]

  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