Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: silver2050 en 24 Noviembre 2012, 19:52 pm



Título: Acesso a un bit concreto del registro
Publicado por: silver2050 en 24 Noviembre 2012, 19:52 pm
Buenas a todos,

A ver si alguien puede echarme una mano, necesito saber como podría acceder a un bit concreto de un registro, es decir, acceder al bit 20 del registro EDX para saber su valor por ejemplo.

Saludos y gracias. 


Título: Re: Acesso a un bit concreto del registro
Publicado por: x64core en 24 Noviembre 2012, 19:58 pm
Buenas a todos,

A ver si alguien puede echarme una mano, necesito saber como podría acceder a un bit concreto de un registro, es decir, acceder al bit 20 del registro EDX para saber su valor por ejemplo.

Saludos y gracias. 
usando una mascara:

MOV EAX,293829382
AND EAX,100000h
TEST EAX,EAX
JE NOHAY
; bit activo
...


Título: Re: Acesso a un bit concreto del registro
Publicado por: silver2050 en 24 Noviembre 2012, 20:59 pm
Muchas gracias compañero, aunque me he perdido un poco. A ver si puedo explicarme mejor:

Necesito hacer una función con código C y ASM, la cual hace varias funcionalidades y recibe un entero de entrada, entonces necesitaría acceder al bit del registro correspondiente al entero (0-31) de forma dinámica, tendría que realizar la máscara de forma dinámica, en lugar de intentar hacer 32 máscaras diferente. Soy novato en ensamblador y no sé si sería posible utilizando SHR (desplazamientos a la derecha) y luego aplicando una máscara.  ¿Cómo lo véis?

Saludos y muchas gracias por vuestro tiempo y ayuda


Título: Re: Acesso a un bit concreto del registro
Publicado por: Ferno en 24 Noviembre 2012, 21:17 pm
Por supuesto, si puedes determinar en tiempo de ejecución la posición del bit a procesar, haces un shift right con el número de desplazamiento correspondiente al calculado en tiempo de ejecución y siempre utilizas el AND con el número 1. Así podrás saber si está activado el bit en cualquier posición.


Título: Re: Acesso a un bit concreto del registro
Publicado por: x64core en 24 Noviembre 2012, 21:22 pm
Seria SHL, no SHR, y recordar establecer el registro a 1. tambíen se podria hacer con SHR pero seria de forma inversa aunque lo más
correcto seria SHL


Título: Re: Acesso a un bit concreto del registro
Publicado por: Ferno en 24 Noviembre 2012, 21:27 pm
Seria SHL, no SHR, y recordar establecer el registro a 1. tambíen se podria hacer con SHR pero seria de forma inversa aunque lo más
correcto seria SHL

En realidad, depende. Al menos lo que yo dije que le entendí a el, sería hacer un shift right del registro donde posee el valor correspondiente (el bit que quiere identificar). Claro que se puede hacer un shift left al registro que contenga el "1" y "construir dinámicamente" la máscara. Pero bueno, son opciones :P


Título: Re: Acesso a un bit concreto del registro
Publicado por: silver2050 en 24 Noviembre 2012, 21:44 pm
Gracias  a ambos.

Entonces si quiero obtener el bit 17 de edx, podría utilizar:

SHL edx, 17  //¿podría utilizar [ebp+8], en lugar del 17?, sería donde se guarda el parámetro de entrada. La función que contiene mi código ASM sería "mi_función(int posicion)"
AND edx, 0x80000000
TEST edx,edx