imprimir los bits que hay en una direccion de memoria

Iniciado por lapras, 7 Noviembre 2009, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

lapras

La verdad que no tengo ni idea de como hacerlo lo que mas me hacerco es esto:
.text
.global main

main:

movl 1, %eax
movl %eax, u
movl $u, %ecx
addl $48, %ecx


movl $3, %edx
movl $1, %ebx
movl $4, %eax
int $0x80

.data

u:
.string "0"

Quisiera mostrar lo que hay en la direccion 1 de la memoria, no se ni siquiera si se puede o esta protegido :-\

Eternal Idol

La direccion 1 seguro que no es valida, mejor intenta con la de tu main, asi sabras el codigo binario de las instrucciones  ::)

PD. No mire el codigo pero depuralo con el gdb en todo caso.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

lapras

para poner los bits seria una strig? mira el ccodigo porfa que seguro que lo tengo todo mal :(

Eternal Idol

Si, de unos y ceros ...

¿Y si usas la g/libc? Tenes disponible la funcion printf por ejemplo, seria mucho mas simple y podrias imprimirlo en hexadecimal ... cuando ya la domines podes incluso depurarla y ver que hace exactamente.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Yurix



http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

lapras

#5
siiiiiiii, gracias Yurix es justo lo que buscaba.
Perdon que he estado estos dias ocupado con examenes y  no he mirado el foro casi.
Bueno ahora luego te digo que tal ;)
Para que ensamblador es el codigo?

EI: juntando mensajes.

buf no entiendo na  :-[
Que es bt?
lpBinario es todo una variable?
numero seria la celdilla de memoria?

Eternal Idol

http://pdos.csail.mit.edu/6.828/2007/readings/i386/BT.htm

lpBinario es un puntero a cadena, numero es el entero (de un byte) a convertir.

Mira el ejemplo de llamada:
invoke IntToBin,0A0h,addr binario
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Yurix


Veo que este código no lo pillan mucho los novatos (eso no quiere decir que sea un master)  , voy a poner otro código que es mas fácil de entender. Espéralo hoy mismo , lo estoy escribiendo .... :

Te lo explico con lujo de detalles ::
-----------------------------------------------------
   mov eax, number ;<< El numero que se "convierte"

   mov ecx,020h  ; Longitud total de los bits + 1 , es decir 20h es 32 en decimal

mov ebx,offset buff - 1 ; Binario es la string donde se alojara el numero convertido

aun3:
    shr eax,1  ; Esto es "botar" 1bit hacia la derecha.
    adc BYTE PTR[ebx+ecx], 30h
loop aun3
-------------------------------------------------------

SHR , es lo mismo que hacer (>>) en otro lenguaje X , como C. Lo que hacemos es botar un bit hacia la derecha , cada bit expulsado activa el flag C *(carry flag) si es un 1 , si es un 0 no lo activa. Esto lo usamos para ir construyendo la cadena ASCII "01110101011".

ADC , es una suma común + el bit del flag C , es decir , sumas 30h *(que es el CERO) y si el flag C esta activo se suma 1bit , lo que da como resultado el 31h (el UNO)

El loop es mas fácil , tu mueves a ecx la cantidad de veces que quieres que se repita el show .Ej>

mov ecx,10

hola:
xor eax,eax  < Se repite 10 veces..
loop hola

Loop comprobara que ecx no sea CERO , si no lo es saltara a hola: , con cada salto se decrementa en 1 ecx , hasta llegar un momento en que sea CERO .
-----
BYTE PTR[ebx+ecx] < Con esto lo que hago es apoyarme en ECX (que va de mayor a menor gracias al loop) para hacer el adc en ese lugar , la "base" es ebx que indica el lugar que reservamos para hacer esta operación.

Te recuero que TIENE QUE SER UN LUGAR QUE ESTE "BACIO" con 0000s

Gózalo


http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

lapras

#8
madre mia que lujo, tampoco hacia falta que te molestases tanto, hombre
ya casi  lo pillo ;D
Lo del SRH me recuerda cuando en los bancos de micolegio ,hay unos que para hacerse hueco empujan la fila y se cae el del otro lado  :xD :xD :xD :xD :xD :xD el que se queda fuera seria el que se queda en el registro de acarreo y el que empuja seria un CERO ¿lo he entendido?

IntToBin  proc Numero:BYTE,lpBinario:DWORD esto que es ??yo he provado a compilarlo y me da error en esa linea.
gracias

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón