Fallo en encriptacion.

Iniciado por fary, 28 Agosto 2010, 08:37 AM

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

fary

Hola buenas, estoi intentando hacer una simple encriptacion en asm pero CREO que me falla la api lstrcat, no estoi muy seguro....

este es el code:

Código (asm) [Seleccionar]
format PE console
entry start

include 'c:\archivos de programa\include\win32ax.inc'

section '.code' code readable executable
start:

stdcall longitud,tipo

proc longitud,cadena

    mov edx,[cadena]
    sub edx,1
    bucle:
    add edx,1
    mov bl,byte[edx]
    cmp bl,NULL
    jz fin
    jnz seguir
    seguir:
        mov [letra],bl
        add [contador],1
        xor bl,5
        invoke lstrcat,[cadena],bl ; esto es lo que me falla
    jmp bucle
    fin:
        pop eax
        invoke printf,tipo2,[cadena]
        invoke scanf,tipo2,numero
        ret
endp

section '.data' data readable writeable

    contador dd 0
    tipo db 'hola',NULL
    tipo2 db '%i',0
    numero dd ?
    letra db ?
    cadena db 'h'

section '.idata' import data readable writeable

    library  msvcrt,'msvcrt.dll',\
        KERNEL32,'KERNEL32.DLL',\
        USER32,'USER32.DLL'

    import msvcrt, printf,'printf',\
        scanf,'scanf'
    import KERNEL32,lstrcat,'lstrcat'
    import USER32,MessageBoxA,'MessageBoxA'       



espero que alguien me ayude.

salu2!
Un byte a la izquierda.

kisk

Cita de: Drinky94 en 28 Agosto 2010, 08:37 AM
Hola buenas, estoi intentando hacer una simple encriptacion en asm pero CREO que me falla la api lstrcat, no estoi muy seguro....

este es el code:

Código (asm) [Seleccionar]
format PE console
entry start

include 'c:\archivos de programa\include\win32ax.inc'

section '.code' code readable executable
start:

stdcall longitud,tipo

proc longitud,cadena

   mov edx,[cadena]
   sub edx,1
   bucle:
   add edx,1
   mov bl,byte[edx]
   cmp bl,NULL
   jz fin
   jnz seguir
   seguir:
       mov [letra],bl
       add [contador],1
       xor bl,5
       invoke lstrcat,[cadena],bl ; esto es lo que me falla
   jmp bucle
   fin:
       pop eax
       invoke printf,tipo2,[cadena]
       invoke scanf,tipo2,numero
       ret
endp

section '.data' data readable writeable

   contador dd 0
   tipo db 'hola',NULL
   tipo2 db '%i',0
   numero dd ?
   letra db ?
   cadena db 'h'

section '.idata' import data readable writeable

   library  msvcrt,'msvcrt.dll',\
       KERNEL32,'KERNEL32.DLL',\
       USER32,'USER32.DLL'

   import msvcrt, printf,'printf',\
       scanf,'scanf'
   import KERNEL32,lstrcat,'lstrcat'
   import USER32,MessageBoxA,'MessageBoxA'        



espero que alguien me ayude.

salu2!

Recomendaciones :

  • No uses add X,1 ni Sub X,1 usa inc X y dec X
  • Nunca pongas una etiqueta con el mismo nombre que un parametro que se puede prestar para confuciones te lo digo por el "cadena db 'h' "
  • Leete la msdn
  • Printf no arregla la pila a si que usa cinvoke no invoke

    Respecto a tu duda no le pasas un puntero a nada al pasarle bl y si no mal recuerdo no se puede pushear bl si no que bx :P
La vieja escuela me da nostalgia la nueva me da naucias dime cual es la escuela si ambas me deprimen (8)