elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Problema con Función..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Función..  (Leído 2,150 veces)
Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Problema con Función..
« en: 20 Mayo 2013, 23:58 »

Hola amigos! Alguien me puede aclarar por que pasa esto ?

Tengo una rutina asi:

Código:

mov ecx, sizeof String1
lea esi, [String1]
lea edi, [String2]
cld
repe cmpsb
je Igual
jmp NoIgual


Esto seria un strcmp, bien.. eso funciona.. ahora si yo quiero meter eso dentro de una funcion, para luego llamarla pasandole string1 y string2 no funca.. digamos asi:

Código:

invoke strcmp, addr String1, addr String2

strcmp proto str1:DWORD, str2:DWORD

mov ecx, sizeof str1
lea esi, [str1]
lea edi, [str2]
cld
repe cmpsb
je Igual
jmp NoIgual

Igual:
mov eax, 0
jmp Exit
NoIgual:
mov eax, 1
Exit:
ret
strcmp endp


Bueno, eso es todo... ¿Por que no funca?


En línea

mr.blood

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Problema con Función..
« Respuesta #1 en: 21 Mayo 2013, 00:25 »

Prueba con esto:

Código
  1. push ebp
  2. mov ebp,esp
  3. ...
  4. ...
  5. código
  6. ...
  7. ...
  8. leave
  9. ret

Esto es para que la pila no sea la misma en las distintas funciones así no se pisan valores de otro "marco" por así decirlo. La instrucción leave se encarga de volver ebp y esp a como estaban.

Yo diría que da ese problema porque no sabe donde retornar en el ret (Porque no has cambiado el "marco" del stack)

Sa1uDoS


En línea

Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Re: Problema con Función..
« Respuesta #2 en: 21 Mayo 2013, 01:00 »

Gracias por responder Mr! Pero no funciono.. :/

No se que pasa...  :¬¬
En línea

MCKSys Argentina
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Problema con Función..
« Respuesta #3 en: 21 Mayo 2013, 01:07 »

Y declarando la funcion con proc?

Probaste?
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Re: Problema con Función..
« Respuesta #4 en: 21 Mayo 2013, 01:09 »

Jajaja sii,, ese de ahi es error de mi mano al escribir en el foro :p

Podria ser posible que sizeof no funcione dentro de la funcion ? ( En este caso )
En línea

MCKSys Argentina
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Problema con Función..
« Respuesta #5 en: 21 Mayo 2013, 01:20 »

No tengo para probar aca, pero podrias usar la lib de masm para sacar el len del string...
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Re: Problema con Función..
« Respuesta #6 en: 21 Mayo 2013, 01:22 »

Si, lo pense.. pero no queria usar mas librerias.. :/

Al menos para probar si es eso me va a servir...
En línea

MCKSys Argentina
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Problema con Función..
« Respuesta #7 en: 21 Mayo 2013, 01:28 »

Por las dudas, un strlen:

Código
  1. strlen proc string:PSTR
  2. push edx
  3. xor eax,eax
  4. mov edx, dword ptr[string]
  5. _isNull:
  6. cmp byte ptr[edx+eax],0
  7. je _strlencmplte
  8. inc eax
  9. jmp _isNull
  10. _strlencmplte:
  11. pop edx
  12. ret
  13. strlen endp
  14.  

Sacado de: http://www.enigmagroup.org/forums/asm/strlen(-char*-string-)-in-masm/
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Re: Problema con Función..
« Respuesta #8 en: 21 Mayo 2013, 01:51 »

Gracias MCKSys, pero no quiere andar.. no es el sizeof, funciona bien...

EDITADO:

Creo que me esta tomando la dirección de memoria, no el contenido.. pues si pongo la misma cadena a comparar si funciona.. pero.. por que ? y como debería aclarar que quiero el contenido y no la dirección de memoria ?
« Última modificación: 21 Mayo 2013, 02:03 por Vaagish » En línea

MCKSys Argentina
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Problema con Función..
« Respuesta #9 en: 21 Mayo 2013, 02:20 »

Creo que me esta tomando la dirección de memoria, no el contenido.. pues si pongo la misma cadena a comparar si funciona.. pero.. por que ? y como debería aclarar que quiero el contenido y no la dirección de memoria ?

Quitale los [] a los LEA y prueba.

MASM deberia tomar los params directamente, sin tener que de-referenciar...
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Re: Problema con Función..
« Respuesta #10 en: 21 Mayo 2013, 02:59 »

No funciono amigo.. luego pruebo otros metodos en casa.. :/
En línea

MCKSys Argentina
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Problema con Función..
« Respuesta #11 en: 21 Mayo 2013, 05:37 »

Si usas la lib de masm y llamas a szCmp, te genera el siguiente codigo:

Código
  1.    MOV ECX,DWORD PTR SS:[ESP+4]
  2.    MOV EDX,DWORD PTR SS:[ESP+8]
  3.    PUSH EBX
  4.    PUSH ESI
  5.    MOV EAX,-1
  6.    MOV ESI,1
  7. Bucle:
  8.    ADD EAX,ESI
  9.    MOVZX EBX,BYTE PTR DS:[EAX+ECX]
  10.    CMP BL,BYTE PTR DS:[EAX+EDX]
  11.    JNZ NoIgual
  12.    TEST EBX,EBX
  13.    JE Iguales
  14.    ADD EAX,ESI
  15.    MOVZX EBX,BYTE PTR DS:[EAX+ECX]
  16.    CMP BL,BYTE PTR DS:[EAX+EDX]
  17.    JNZ NoIgual
  18.    TEST EBX,EBX
  19.    JE Iguales
  20.    ADD EAX,ESI
  21.    MOVZX EBX,BYTE PTR DS:[EAX+ECX]
  22.    CMP BL,BYTE PTR DS:[EAX+EDX]
  23.    JNZ NoIgual
  24.    TEST EBX,EBX
  25.    JE Iguales
  26.    ADD EAX,ESI
  27.    MOVZX EBX,BYTE PTR DS:[EAX+ECX]
  28.    CMP BL,BYTE PTR DS:[EAX+EDX]
  29.    JNZ NoIgual
  30.    TEST EBX,EBX
  31.    JNZ Bucle
  32. Iguales:
  33.    POP ESI
  34.    POP EBX
  35.    RETN 8
  36. NoIgual:
  37.    XOR EAX,EAX
  38.    POP ESI
  39.    POP EBX
  40.    RETN 8
  41.  

El largo, pero efectivo (la comparación es Case-Sentive).

La ayuda dice:


szCmp


szCmp proc str1:DWORD,str2:DWORD


Description

szCmp compares two zero terminated strings for difference.


Parameters

1. str1 The first string to compare
2. str2 The second string to compare


Return Value

If the two strings match, the return value is the length of the string. If there is no match, the return value is zero.


Comments

The procedure can be used on strings that may be of uneven length as the terminator will produce the mismatch even if the rest of the charactes match.
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

mr.blood

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Problema con Función..
« Respuesta #12 en: 21 Mayo 2013, 08:07 »

Pusiste el 0 al final de las cadenas? Prueba a sacarlas de la función y llamarlas con un JMP a ver que pasa, si funciona prueba con un CALL en vez de invoke.

Por favor postea el código entero para que podamos ayudarte mejor ;).

Mira ese post a ver si te ayuda...
http://indetectables.net/viewtopic.php?f=87&t=26945

Sa1uDoS
« Última modificación: 21 Mayo 2013, 08:10 por mr.blood » En línea

Vaagish


Desconectado Desconectado

Mensajes: 655



Ver Perfil
Re: Problema con Función..
« Respuesta #13 en: 21 Mayo 2013, 19:30 »

Hola amigos, gracias por el interes.. ahi va el code...

Código:

; Datos

Cadena1 db "Hola", 0
Cadena2 db "Hola", 0
Iguall db "Las cadenas son iguales", 0
NoIguall  db "Las cadenas son distintas", 0


; Declaracion
StrCmp proto :DWORD, :DWORD

; Llamado
invoke StrCmp, addr Cadena1, addr Cadena2

; Funcion
StrCmp proc Str1:DWORD, Str2:DWORD

    mov ecx, sizeof Str1
    lea esi, [Str1]
    lea edi, [Str2]
    cld
    repe cmpsb
    je Igual
    jmp NoIgual

Igual:
invoke MessageBox, 0, addr Iguall, addr Titulo, MB_OK
mov eax, 0
ret

NoIgual:
invoke MessageBox, 0, addr NoIguall, addr Titulo, MB_OK
mov eax, 1
ret

StrCmp endp


Bueno, es un resumen,, pero basicamente es asi.. no entiendo que pasa.. Ha si, ya se que el ret no sale de la funcion, pero si son iguales las cadenas tampoco pasa por la etiqueta " Igual: "

Mr.blood: de ese enlace salio la rutina, yo la quiero adaptar para una funcion.. pero no funciona valga la redundancia  :xD

MCKSys: Si no lo logro hoy con esta funcion, paso a probar con ese code ;) Gracias!!

EDITADO: Bueno,, con una pequeña modificacion funciona mejor.. pero igual queda un problema por resolver.. el cuerpo de la funcion quedo asi:

Código:

    mov ecx, sizeof Str1
    mov esi, [Str1]
    mov edi, [Str2]
    cld
    repe cmpsb
    je Igual
    jmp NoIgual


Esta comparando la direccion de memoria si, comprobado.. Pero por que ? Como deberia aclararle que quiero el contenido en esi y en edi ? :/
« Última modificación: 21 Mayo 2013, 20:58 por Vaagish » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con la funcion Chr
Programación Visual Basic
sircid 2 540 Último mensaje 9 Agosto 2006, 14:50
por sircid
Problema con funcion
Programación C/C++
Leber 8 1,176 Último mensaje 27 Febrero 2008, 01:06
por juas juas juas
Problema con función
Programación C/C++
& eDu & 5 922 Último mensaje 25 Junio 2009, 01:40
por MessageBoxA
Problema con Una funcion en C
Programación C/C++
Mr.LInk 6 940 Último mensaje 2 Marzo 2010, 21:01
por Mr.LInk
Problema con funcion
Programación C/C++
Caster 3 658 Último mensaje 30 Septiembre 2012, 08:59
por Caster
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines