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:
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!
			
			
			
				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:
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