Codigos de Yuri Grille

Iniciado por Yurix, 11 Junio 2009, 20:47 PM

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

Yurix

#40
Hola a todos ,este es mi nuevo aporte al foro , (hace días que no pongo nada) , el code es sencillo y efectivo para convertir un byte a su forma binaria en Ascii .

Como funciona , trabajo con la instrucción BT de la cual hablamos en el post sobre Par o Impar , lo que hago con ella es empezar a ver el ultimo bite ,el numero 7 si es 1 la pongo en la variable binario , si es 0 lo mismo . Después decremento AL hacia el bite 6 y se repite la operación , esto se repite hasta llegar al bite 0 que es el ultimo. Este code se puede modificar para que trabaje con strings o con un rago de memoria , pero eso es para después.Chao people y comenten

; Convertir un numero hexadecimal a "binario" por ejemplo la letra a es 61h

Prototipo
IntToBin  proto :BYTE,:DWORD
--------------------------------------------------------

Función

IntToBin  proc Numero:BYTE,lpBinario:DWORD

 mov al,7h
mov ebx,lpBinario ; Binario es la string donde se alojara elnumero convertido
mov cl,Numero


  aun2:
  dec     eax
  bt      ecx, eax
  mov byte ptr ds:[ebx],31h
  jb      nocero2
  mov byte ptr ds:[ebx],30h

  nocero2:
inc ebx
cmp al,0FFh ; VER si es el fin ...
jnz aun2

ret
IntToBin endp


Uso de la función

invoke IntToBin,0A0h,addr binario
--------------------------------------------------------

El code es libre siempre que se indique el autor de este.jajaja

Chao.
PD: Todos los que quieran ayudar , estoy haciendo un pequeño escrito sobre instrucciones inútiles y quisiera que mandaran tips sobre estos temas , ej de instrucción inútil

"inc cl" ;<< Nada mas inútil que usar este code debe de estar prohibido , sabes por que ?
Porque es mejor hace "inc ecx" y el resultado es el mismo y nos ahorramos un byte

00401000 >    FEC1          inc     cl
00401002      41            inc     ecx

Ley numero 1 > Nunca incrementes un registro low como es el caso de "al cl dl bl"
Parece sencillo pero lo he visto en algunos casos (personales) XD
----------------------------------------------------------------------------
Otro caso es este:
(Objetivo : Poner en 7 a eax)

00401000 >    33C0          xor     eax, eax
00401002      83C0 07       add     eax, 7
-------------------
00401005      B8 07000000   mov     eax, 7

Cual es mejor??
link http://foro.elhacker.net/asm/codigos_inutiles-t261032.0.html


Salu DOs



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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

Yurix

hola a todos , después de unos días sin postear nada , vengo con algo que te puede interesar , es una forma de convertir un sector de memoria a ASCII Hexadecimal , esto te puede ser util para un editor hex o etc ...

Espero que te sea util y recuerdes que al utilizar el code digas el nombre de su autor  P>)
Este codigo es libre ....

Aqui lo pongo con su loop para convertir un rango de memoria

Código (asm) [Seleccionar]
mov ecx,100  ;<< Esta es la cantidad de bytes a comvertir
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
repetimos:
xor eax,eax
mov al, byte ptr ds:[Texto + ecx - 1]
mov ax, word ptr ds:[eax*2 + tabla]
mov word ptr ds:[convertido + ecx*2 - 2],ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop repetimos

; la variable texto es el lugar por donde empezaremos a convertir !!
; la varible tabla es una *(tabla) *((precalculada , << a que suena a matematico , para acelerar el proceso))
;

convertido db 200 dup (?),0

Texto byte "Hola esto es una forma muy rapida de convertir a hexadecimal",0
Titulo db "Convirtiendo una string a hexadecima modo rapido ...",0

tabla db "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051"
tabla2 db "52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3"
tabla3 db "A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF"


Si tienes alguna duda dímelo !!!


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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

Karcrack

Interesante... aunque talvez se podria hacer sin utilizar un tabla que contenga los 255 posibles valores hexadecimales de un byte...

Yurix

Eso ya esta hecho , mira en los codes de YST , este lo hice para algo muy rapido ... solo para eso . Si quieres ahorrar espacio este no es el indicado !!! aunque , que son 512 bytes ?? no mucho !!

SaluDoS


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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.

Erik#


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

Erik#

Cita de: Eternal Idol en 12 Agosto 2009, 11:10 AM
Si, es un (d=data) registro de segmento:
http://en.wikipedia.org/wiki/X86#x86_registers

La página de wikipedia esa me va genial, segmentos de mi procesador 64 bits que podria usar :P
Y una cosa, no funcionan los registros de 64 bits en un pc de 32 verdad, me refiero a que si yo creo un .exe en FASM usando registros x86_64 no iran bien en un pc de 32.

Eternal Idol

Un PE de 64 bits no se puede ejecutar en una maquina (o S.O.) de 32 bits.
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

Erik#

Cita de: Eternal Idol en 12 Agosto 2009, 11:25 AM
Un PE de 64 bits no se puede ejecutar en una maquina (o S.O.) de 32 bits.

Es verdad no me acordaba, pero tampoco tiene que ser un PE, puedes ser un ELF.

Eternal Idol

Si, efectivamente puede ser un ELF o ELF64 y se mantiene el mismo principio.
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