Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ny0x

#41
ASM / Re: Salir sin usar ExitProcess !!!!
19 Junio 2009, 00:42 AM
yo nunca he usado ExitProcess en asm  :P y en C solo cuando tengo varios hilos.
#42
ASM / Re: Invertir una string , sencillo ...
18 Junio 2009, 22:40 PM
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 (asm) [Seleccionar]

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'
#43
ASM / Re: De mayuscula a minuscula ...
18 Junio 2009, 04:39 AM
Cita de: Yurix en 16 Junio 2009, 21:57 PM
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 (asm) [Seleccionar]

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 (asm) [Seleccionar]

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
#44
no estoy muy informado sobre el tema pero me parece que eso se hace desde el ring0  :-\

encontre esto puede te sirva puede que no

http://blog.48bits.com/?p=60
http://support.microsoft.com/kb/121093/es
#45
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 (asm) [Seleccionar]

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
#46
ASM / Re: Hola Como Seguir?
16 Junio 2009, 02:42 AM
visita el Entry Point ahi hay unos libros, te recomiendo el primero esta muy bien explicado y es el que yo estoy usando para aprender, nada mas que debes saber ingles

tambien te recomiendo echarle un vistazo a los codes de YST para que te des una idea.
#48
gracias por la documentacion, estan muy buenos los ejemplos y estan en fasm   ;-)
#49
muy bien arkangel me sabia qua haciendo un xor 0x20 al caracter se cambia a mayusculas pero si ya esta en mayusculas lo vuelve a minisculas, muy bueno el uso de and  ;-) .

PD. no seria mas facil usar esi y edi  :huh:
#50
perfecto ese era el error ahora si me funciona bien, era lo de writeable, me funciona de ambas maneras poniendo un nuevo segmento con readable writeable o asignandole la propiedad de escritura al segmento actual. Que error mas estupido  :laugh:

gracias EI y yst no se me habia ocurrido lo del segment

saludos

P.D Creo que SYS_READ incluye el retorno en la cadena porque me aparece con una longitud un caracter mas largo de lo que es