elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 01:03  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Codigos de Yuri Grille
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Codigos de Yuri Grille  (Leído 12,997 veces)
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Invertir una string usando la pila ...
« Respuesta #15 en: 16 Junio 2009, 22:01 »

;;;;;;;;;;;;;;;;;;;;;;;;;Invertir una string por Yuri Grille
COMMENT *Este codigo sirve para invertir una string , puede ser mejorado pero eso sera mas adelante.
Tiene como proposito ver el principio de funcionamiento de la pila (ultimo en guardar
primero en sacar )
Utilizo la pila para guardar los primeros caracteres hasta llegar al final donde los recupero y los
muevo a el principio de la cadena.
Hay que tener cuidado con el tamaño de la string a imbertir ya que la pila creo que tiene un limite.Si alguien puede argumentarme esta duda , por favor que escriba :huh:*

push 00  ; Introdusco 0 en la pila para despues recuperarlo y saber que es el caracter final
lea eax,string ; Muevo a eax la direccion en memoria de la string

gam:
cmp     byte ptr ds:[eax], 0  ;Comparamos el primer caracter
jz segpart                  ; Si son iguales es el fin y saltamos a la segunda parte
mov cl , byte ptr ds:[eax]    ; Movemos a cl el primer byte de la string
inc eax                    ;Incrementamos el puntero para el proximo byte de la cadena
push ecx                 ; Guardamos el registro "ecx" en la pila ,el cual contiene a "cl"
jmp gam                    ; Saltamos a el principio .:^:. gam

segpart:

lea eax,string  ; Movemos otra vez la direccion en memoria de la string a eax

mas:
cmp byte ptr ds:[eax], 0 ;Comparamos el primer caracter
jz completo             ; Si son iguales es el fin y saltamos al final
pop ecx                ; Recuperamos de la pila el ultimo valor almacenado
mov byte ptr ds:[eax] , cl ; Y esto lo movemos a la direccion inicial de la cadena
inc eax                ; Incrementamos el puntero para el segundo caracter
jmp mas                ; Saltamos al principio

completo:
;;;;;;;;;;;;;;;;;;;;;;;;;Invertir una string por Yuri Grille , saludos 


En línea



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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: Invertir una string usando la pila ...
« Respuesta #16 en: 16 Junio 2009, 22:18 »

usa el GeSHI para que el codigo se vea mas bonito y si la pila tiene un limite.
En fin dejo una version de strrev un tanto chapucera porque no me acostumbro todavia a programar en asm.

Código
strrev:
       push ebp
       mov ebp,esp
       push edi
       mov edi,[ebp + 8]
       push edi
       call strlen
       xor ecx,ecx
       dec eax
       jmp LL1
       LL0:
               dec eax
               inc ecx
               cmp ecx,eax
               jge LL2
       LL1:
               mov dl,byte[edi + ecx]
               xchg byte[edi + eax],dl
               mov byte[edi + ecx],dl
               jmp LL0
 
       LL2:
       mov eax,[ebp + 8]
       pop edi
       pop ebp
retn 4
 
strlen:
push edi
xor ecx,ecx
mov edi, [esp + 8]
not ecx
xor eax,eax
cld
repne scasb
not ecx
pop edi
add eax,ecx
dec eax
retn 4
 
 

la funcion depende de strlen pero eso se puede corregir injertandolo dentro de la misma funcion yo no lo hice porque ya tenia strlen y me dio hueva ponerlo ademas, que no se me hace facil todavia planear un codigo asm


En línea
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Re: Invertir una string usando la pila ...
« Respuesta #17 en: 16 Junio 2009, 22:30 »



Gracias por el code ,despues lo analizo en casa.
« Última modificación: 16 Junio 2009, 22:33 por Yurix » En línea



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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: De mayuscula a minuscula ...
« Respuesta #18 en: 18 Junio 2009, 04:39 »

Hola a todos , esta es mi forma de pasar un texto a mayuscula o minuscula
(add    byte ptr ds:[eax], 20h) , no es mejor ni peor solo es la forma que encontre.
Escriban las suyas para comparar

lea     eax, string
dec eax
inicio:
inc     eax
cmp     byte ptr ds:[eax], 0
je      salir

cmp     byte ptr ds:[eax], 61h
jb      inicio               ; Salta si es menor a "61" o "a"
cmp     byte ptr ds:[eax], 7Ah
ja      inicio               ; Salta si es mayor que "7a" o "z"
sub     byte ptr ds:[eax], 20h  ; Resta 20 para hacerlos mayuscula
jmp     inicio ; SAlta a el principio
salir:

a mayusculas
Código
toUpper:
push ebp
mov ebp,esp
   mov esi,[ebp + 8]
begin:
   lodsb
   cmp al,0
   je endx
   sub al,0x61
   cmp al,0x1A
   ja incr
   and byte[esi-1],0xDF
   incr:
jmp begin
endx:
pop ebp
 
retn 4
 

a minusculas
Código
toLower:
   push ebp
   mov ebp,esp
   mov esi,[ebp + 8]
beginL:
   lodsb
   cmp al,0
   je endx
   sub al,0x41
   cmp al,0x1A
   ja incrL
   or byte[esi-1],0x20
   incrL:
jmp beginL
endxL:
pop ebp
retn 4
 

no son la mejor implementacion del mundo pero funcionan  :P
En línea
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Par O Impar ?¿
« Respuesta #19 en: 18 Junio 2009, 17:40 »

Como saber si un numero alojado en un registro (ej eax) es par:

Simplemente :

and eax,1
jnz Par
Si eax es 0 es par.

Sencillo pero modifica a eax , solo en el caso de que necesitemos a eax con el valor
original podemos usar este código que no lo modifica:

test eax,1
je Par    ;Si Salta es par

Pero un código aun mejor es este: *Por Orniaco (Honor a quien honor merece)

Ventajas : Se usa la instrucción bt la cual tiene un consumo nulo
de los siclos del CPU de los 808x (Eso dicen en los opcode) y no modifica a EAX

bt      eax, 0
jnb     Espar  ; Salta a donde trabajaremos si es par

---------------------------------------------------------------------------------------
----------------------------------------------------------------Consumos de CPU y Bytes
---------------------------------------------------------------------------------------

                        Ciclos                 Tamaño
Operands         808x  286   386   486          Bytes
reg,immed         4     3     2     1            3-4       <<<<<<<<< El consumo de And
reg,immed         5     3     2     1            3-4        <<<<<<< El consumo de Test
reg16,immed8     -     -     3     3            4-8  <<<<<<<<<< El consumo de Bt

Consumo exacto de Bytes:

83E0 01          and     eax, 1     <<<<<<<< El consumo de And  eax,1 (3 bytes)
A9 01000000      test    eax, 1     <<<<<<<< El consumo de Test eax,1 (5 bytes)
0FBAE0 00        bt      eax, 0  <<<<<<<<<< El consumo de Bt   eax,0 (4 bytes)

---------------------------------------------------------------------------------------
----------------------------------------------------------------Consumos de CPU y Bytes
---------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------
--------------------------------------------Mi (Humilde) Conclusión ; jajaja  YST-H1N1 ;D
---------------------------------------------------------------------------------------

Si queremos saber si un numero es par sin modificar a eax usar (test eax,1) , si deseamos
cerar a eax en el caso que sea par podemos usar (and eax,1) ,

Pero:
Si estamos dentro de un ciclo repetitivo con X cantidad de operaciones y queremos saber
con rapidez si es par,lo mejor es usar (Bt eax,0) , ademas de no modificar a eax , para
una necesidad posterior.


No necesariamente tiene que estar en eax , puede ser en cualquier otro.

---------------------------------------------------------------------------------------
--------------------------------------------------------------------------Opcode usados
---------------------------------------------------------------------------------------

Uso:  TEST    destino,fuente

Modifica las banderas: CF OF PF SF ZF (AF undefined)

Performs a logical AND of the two operands updating the flags register without saving the result.
(Hace un And lógico con los dos operados , actualizando las Banderas sin salvar el resultado.)

                         Ciclos CPU             Tamaño
Operands         808x  286   386   486          Bytes
reg,reg                3     2     1     1             2
reg,mem          9+EA   6     5     1            2-4  (W88=13+EA)
mem,reg          9+EA   6     5     2            2-4  (W88=13+EA)
reg,immed           5     3     2     1            3-4  <<<<<<<El consumo de Test eax,1
mem,immed   11+EA   6     5     2            3-6
accum,immed       4     3     2     1            2-3

--------------------------------------------------------------------------------------

Uso:  BT      destino,fuente (source)

Modifica las banderas: CF

The destination bit indexed by the source value is copied into the
Carry Flag.

(El bit de destino indexado por el valor de la fuente es copiado dentro del Carry Flag (Bandera de Acarreo))

                         Clocks                 Size
Operands         808x  286   386   486          Bytes
reg16,immed8      -     -     3     3            4-8 <<<<<<<<<
mem16,immed8    -     -     6     6            4-8
reg16,reg16          -     -     3     3            3-7
mem16,reg16       -     -     12    12           3-7

« Última modificación: 18 Junio 2009, 18:22 por Yurix » En línea



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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Par O Impar ?¿
« Respuesta #20 en: 18 Junio 2009, 18:39 »

Buena esa, pero me podrias explicar mejor que hace el BT que es una de las instruciones que aun no comprendo. Gracias  ;)
En línea





Mi blog:
http://amerikanocls.blogspot.com
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Par O Impar ?¿
« Respuesta #21 en: 18 Junio 2009, 19:20 »

"El bit de destino indexado por el valor de la fuente es copiado dentro del Carry Flag (Bandera de Acarreo)".

bt is bit test y lo que hace es guardar un bit determinado (en este caso el primero, 0) del destino en el flag de acarreo (CARRY FLAG, por eso yo usaria jnc por claridad aunque al final el opcode es el mismo). Aca se lo usa para saber si un numero es par, si es divisible por dos su primer bit sera 0.
En línea



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
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Par O Impar ?¿
« Respuesta #22 en: 18 Junio 2009, 19:24 »

Gracias  ;)
En línea





Mi blog:
http://amerikanocls.blogspot.com
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Invertir una string , sencillo ...
« Respuesta #23 en: 18 Junio 2009, 19:35 »

Hola a todos , esta es una forma de invertir una string sin usar la pila que fue el ejemplo anterior que publique , este codigo necesita tener en eax la longitud de la string.

Saludos

Código
mov ebx,string 
add eax,ebx
dec ebx
 
asd:
mov ch, byte ptr ds:[ebx]
xchg [eax],ch
xchg [ebx],ch
 
inc ebx
dec eax
cmp     ebx,eax
jbe asd  ; Salta si es Menor o igual

-----------------
Nota> Para usar este código es necesario introducir una string con un caracter al principio de nuestro codigo , es decir , antes de declara la string que invertiremos tenemos que declarar > vacia db " ",0
No olvidar esto
-----------------
------------------------------------------------------ off topic
Si en algo siempre tendré la razón es cuando diga:
"Los hombres no piensan igual"
a)Si no estas de acuerdo con esta frase me estas dando la razón.
B)Si estas de acuerdo , gracias por coincidir con mis pensamientos.
« Última modificación: 17 Agosto 2009, 21:29 por Yurix » En línea



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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: Invertir una string , sencillo ...
« Respuesta #24 en: 18 Junio 2009, 22:40 »

me encontre con un problemita, cuando intente ver el codigo en accion mediante el olly, me di cuenta de algo

lea ebx,string
dec ebx

en un principio ebx apunta al primer caracter de la cadena y al decrementarlo apunta a una region de memoria que no es la cadena
y cuando hagas

mov byte ptr ds:[ebx], cl

salta un error y cierra el programa lo correcto es decrementar eax, porque los limites de un array es size -1

aqui esta el testeo y la salida es emetreivni

Código
format pe console
entry main
include 'c:\fasm\include\win32ax.inc'
.data
texto   db      'invierteme',0
.code
main:
   xor eax,eax
   add eax,10
   mov ebx, texto
       add eax,ebx
       dec eax
 
       asd:
        mov ch, byte[ebx]
        mov cl, byte[eax]
        mov byte[ebx], cl
        mov byte[eax], ch
        inc ebx
        dec eax
        cmp     ebx,eax
        jbe asd
 
push texto
call [puts]
add esp,4
ret
 
section '.idata' import data readable
library msvc,'msvcrt.dll'
import msvc,puts,'puts'
 
« Última modificación: 18 Junio 2009, 22:44 por x0ʎu » En línea
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Salir sin usar ExitProcess !!!!
« Respuesta #25 en: 18 Junio 2009, 23:11 »


Una forma de Salir sin usar ExitProcess , introduscanlo en olly para que vean como es.

http://sites.google.com/site/compactamos/descargas/Calc.zip?attredirects=0

Una pista : xxxxxxxxxxxx
En línea



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

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Salir sin usar ExitProcess !!!!
« Respuesta #26 en: 19 Junio 2009, 00:23 »

Con un ret desde el entry point es suficiente igual  :D Ahi mismo nos esta esperando una llamada a ExitThread.

Esto da una excepcion no controlada ... se me abre el WinDbg que esta registrado para eso, a otros se les abrira el Dr. Watson, no es una forma muy buena de terminar un proceso ...

SetDlgItemTextA, los dos primeros parametros son validos, el tercero es el primer caracter de la cadena mostrada por MessageBoxA, en lugar de ser el puntero a la misma.
« Última modificación: 19 Junio 2009, 00:32 por Eternal Idol » En línea



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
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: Salir sin usar ExitProcess !!!!
« Respuesta #27 en: 19 Junio 2009, 00:42 »

yo nunca he usado ExitProcess en asm  :P y en C solo cuando tengo varios hilos.
En línea
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Salir sin usar ExitProcess !!!!
« Respuesta #28 en: 19 Junio 2009, 00:46 »

Yo digo que es por el desalineamiento de pila por el push ax....... puestos a decir  :P jajaja pero ni idea
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Salir sin usar ExitProcess !!!!
« Respuesta #29 en: 19 Junio 2009, 09:19 »

Yo digo que es por el desalineamiento de pila por el push ax....... puestos a decir  :P jajaja pero ni idea

Nopes, aunque eso sucede no llega a afectar, fijate que da error aca:
user32!RtlInitLargeAnsiString+0x22:
7e420a9c 8a11            mov     dl,byte ptr [ecx]          ds:0023:00000054=??

0:000> r ecx
ecx=00000054

54=84=T (el primer caracter de "Te gusto ...").
En línea



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
Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines