comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Como comparar un string?

  • 4 Respuestas
  • 2104 Vistas

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

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 121
  • Actividad:
    0%
  • Reputación 0
  • belial grimoire
    • Ver Perfil
« en: Agosto 16, 2013, 04:22:09 am »
hola

tengo una duda, cuando comparo cadena de caracteres, he estado utilizando cmpsb, por ejemplo

Código: ASM
  1. mov ecx, 5
  2. mov edi, buf1
  3. mov esi, replu
  4. cld
  5. repe cmpsb
  6. je plus

el problema es que tengo que especificar a ecx la cantidad de caracteres, entonces se me ocurrio mejor analizar byte por byte y al encontrar un null brincar a la siguiente instruccion, asi que hice esto

Código: ASM
  1. st_lo:
  2. mov al, byte[buf1]
  3. mov bl, byte[replu]
  4. cmp al, bl
  5. jne end
  6. cmp al, 0
  7. je plus
  8. inc byte[buf1]
  9. inc byte[replu]
  10. jmp st_lo
  11.  

el objetivo era mover 1 byte a bl y al, si al compararlo no es igual entonces terminar el programa, despues volverlo a comparar, si es 0 queria decir que es el fin de la cadena y brincar a la funcion, pero si tampoco era el final de la cadena, incrementar 1 byte en el buffer que contiene la palabra para avanzar a la siguiente letra, y tambien incrementar 1 byte en en la variable replu para avanzar a la siguiente letra

entonces si yo escribo

"hola", queria que se compara letra por letra hasta encontrar el null, 'h','o','l','a','/0' <-- si es igual 0 y 0 (jmp)

el problema es que con solo escribir 'h', avanza...que es lo que estoy haciendo mal? y eso podria funcionar?
« Última modificación: Agosto 27, 2014, 09:02:43 pm por Expermicid »

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #1 en: Agosto 19, 2013, 11:37:48 pm »
Habria que depurarlo pero vamos, si aqui haces esto:

Código: ASM
  1. mov al, byte[buf1]
  2. mov bl, byte[replu]

Aumentas el valor del byte no la posicion del puntero.

Desconectado Danyfirex

  • *
  • Underc0der
  • Mensajes: 22
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Agosto 20, 2013, 10:40:56 am »
Como dice mDrinky aumentas el byte.

Podrías hacer algo así

Código: ASM
  1. mov ecx,0  ; colocas a cero
  2.  
  3. mov al, byte[buf1+ecx]
  4. mov bl, byte[replu+ecx]
  5.  
  6. ;y vas aumentando
  7. ;inc byte[buf1] así no
  8. ;inc byte[replu] así no
  9. inc ecx ; así si.



Bueno soy un principiante es lo que mas o menos se me viene a la mente.

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 121
  • Actividad:
    0%
  • Reputación 0
  • belial grimoire
    • Ver Perfil
« Respuesta #3 en: Agosto 20, 2013, 10:03:41 pm »
ok, entiendo

buscando en google encontre un codigo que simula un strcmp, de alli saque la idea, ya que al principio solo hacia una comparacion del primer byte, y despues se me ocurrio usar cmpsb

entonces de que forma analiza una cadena este codigo?, yo creia que analizaba el primer byte, despues avanzaba 4 bytes de la cadena guardada y analizaba el siguiente byte, hasta encontrar un null

Código: ASM
  1.     ; -------------------------------------------------
  2.     ; int strcmp(char *a, char *b)
  3.     ; -------------------------------------------------
  4.     strcmp:
  5.        push ebx
  6.        strcmp_loop:
  7.           mov    eax, [esp + 0x08]
  8.           mov    al, byte [eax]
  9.           mov    ebx, [esp + 0x0C]
  10.           cmp    al, byte [ebx]
  11.           jne    strcmp_not_equal
  12.           cmp    al, 0
  13.           je    strcmp_equal
  14.           inc   dword [esp + 0x0C]
  15.           inc    dword [esp + 0x08]
  16.           jmp    strcmp_loop
  17.        
  18.        strcmp_not_equal:
  19.           mov    eax, 0
  20.           jmp    strcmp_end
  21.        
  22.        strcmp_equal:
  23.           mov    eax, 1
  24.          
  25.     strcmp_end:
  26.        pop    ebx
  27.        ret    8
  28.        

Desconectado Danyfirex

  • *
  • Underc0der
  • Mensajes: 22
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Agosto 20, 2013, 10:40:43 pm »
Yo lo veo así:


Código: ASM
  1. mov eax, [esp + 0x08]  ;muevo a eax lo que hay en [esp + 0x08] (que es un puntero)
  2. mov al, byte [eax]    ;ahora muevo a al un byte del lo que hay en el puntero
  3. mov ebx, [esp + 0x0C]  ;muevo ebx lo que hay en [esp + 0x0C] (que es un puntero)
  4. cmp al, byte [ebx]     ;comparo el byte de al con el byte del puntero que tiene ebx
  5. jne strcmp_not_equal
  6. cmp al, 0
  7. je strcmp_equal
  8. inc dword[esp + 0x0C]  ; incremento lo que hay en   [esp + 0x0C] (El Puntero)
  9. inc dword[esp + 0x08] ; incremento lo que hay en   [esp + 0x08] (El Puntero)
  10.                                


PD: Espero el comentario de alguien con mas experiencia. por si estoy equivocado  ???

saludos
« Última modificación: Agosto 20, 2013, 10:55:15 pm por Danyfirex »

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 8384
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2293
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 3196
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 3569
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon
[SOLUCIONADO] Problem al instalar Windows "cualquier windows"

Iniciado por Made

Respuestas: 7
Vistas: 3133
Último mensaje Septiembre 03, 2012, 04:53:08 pm
por Made