Autor
|
Tema: Problema con Función.. (Leído 9,569 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
No funciono amigo.. luego pruebo otros metodos en casa.. :/
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
Si usas la lib de masm y llamas a szCmp, te genera el siguiente codigo: MOV ECX,DWORD PTR SS:[ESP+4] MOV EDX,DWORD PTR SS:[ESP+8] PUSH EBX PUSH ESI MOV EAX,-1 MOV ESI,1 Bucle: ADD EAX,ESI MOVZX EBX,BYTE PTR DS:[EAX+ECX] CMP BL,BYTE PTR DS:[EAX+EDX] JNZ NoIgual TEST EBX,EBX JE Iguales ADD EAX,ESI MOVZX EBX,BYTE PTR DS:[EAX+ECX] CMP BL,BYTE PTR DS:[EAX+EDX] JNZ NoIgual TEST EBX,EBX JE Iguales ADD EAX,ESI MOVZX EBX,BYTE PTR DS:[EAX+ECX] CMP BL,BYTE PTR DS:[EAX+EDX] JNZ NoIgual TEST EBX,EBX JE Iguales ADD EAX,ESI MOVZX EBX,BYTE PTR DS:[EAX+ECX] CMP BL,BYTE PTR DS:[EAX+EDX] JNZ NoIgual TEST EBX,EBX JNZ Bucle Iguales: POP ESI POP EBX RETN 8 NoIgual: XOR EAX,EAX POP ESI POP EBX RETN 8
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
Mensajes: 150
|
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=26945Sa1uDoS
|
|
« Última modificación: 21 Mayo 2013, 08:10 am por mr.blood »
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Hola amigos, gracias por el interes.. ahi va el code... ; 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 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: 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 pm por Vaagish »
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Bueno.. al final use lstrcmp, no me complico mas.. Pero ya que estamos en el hilo, podria alguien explicar como se usa szCmp ? Yo agrege masm.inc y masm.lib, luego llame a la funcion.. pero no da error ni me funciono tampoco..
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
Ya lo habia puesto: 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.
Cabe destacar que el valor de retorno es en EAX. Saludos!
|
|
|
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
Mensajes: 875
|
Gracias MCKSys!! No algo había echo mal que no funcionaba :p ahora si
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
PROBLEMA CON FUNCIÓN CASE:
Programación Visual Basic
|
CRAB
|
8
|
2,691
|
3 Septiembre 2005, 21:28 pm
por NYlOn
|
|
|
Problema con la funcion Chr
Programación Visual Basic
|
sircid
|
2
|
1,772
|
9 Agosto 2006, 14:50 pm
por sircid
|
|
|
Problema con funcion
Programación C/C++
|
Caster
|
3
|
2,859
|
30 Septiembre 2012, 08:59 am
por Caster
|
|
|
Problema con una funcion
« 1 2 »
Programación C/C++
|
ThronerAXE
|
10
|
4,387
|
9 Mayo 2013, 15:28 pm
por leosansan
|
|
|
Problema con función en c
Programación C/C++
|
Gigasnike95
|
1
|
1,653
|
14 Diciembre 2014, 12:32 pm
por ivancea96
|
|