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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Ayuda con funcion "Split"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con funcion "Split"  (Leído 14,154 veces)
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #20 en: 30 Marzo 2013, 23:09 pm »

Ahora, si quieres hacer un split como el de VB (delimitador de más de un carácter), la cosa se complica. Lo difícil en ese caso es el algoritmo a usar, y hay que pensarlo bien para que sea óptimo.

Siempre puedes tracear el runtime de VB y ver qué hace... :)

Por supuesto, hay que tener en cuenta que VB usa UNICODE internamente.


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



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #21 en: 2 Abril 2013, 02:33 am »

Bueno,, gracias a la ayuda de ustedes, logre hacer funcionar el Split.. Les voy a dejar aca el codigo que me dio resultado.. Ya se que se puede mejorar montones, y lo pongo aca, justamente para que si alguien quiere lo corrija.. me serviria mucho.
No se olviden que yo no se practicamente nada de ASM, pero hacer que funcione fue bastante para mi jeje ;)

Código:
.386
.model flat, stdcall
option casemap:none

include Includes.inc

.data

Mensaje db "Mens|ajes",0
Titulo db "Resultado",0

.data?

Dato1 db 50 dup (?)
Dato2 db 50 dup (?)

.code

Inicio:

invoke Split, addr Mensaje
ret
invoke ExitProcess, 0


Split proc String:DWORD
   
    mov ecx, -1
mov ebx, -1
   
    Repite:
   
        inc ecx
        mov al, byte ptr ds:[Mensaje+ecx]
  cmp al, '|'
  je Salta
  mov [Dato1+ecx], al
jmp Repite

Salta:

inc ecx
inc ebx
cmp byte ptr ds:[Mensaje+ecx],0
        je Salir
       
        mov al, byte ptr ds:[Mensaje+ecx]
        mov [Dato2+ebx], al
jmp Salta

Salir:
invoke MessageBox, NULL, addr Dato1, addr Titulo, MB_OK
invoke MessageBox, NULL, addr Dato2, addr Titulo, MB_OK

ret

Split endp

end Inicio

Ya se que la funcion tiene un parametro que no uso, pero en el programa que estoy haciendo si lo voy a precisar.. Aparte no se controlan algunos errores, como que si el string comienza con "|" o si no tiene ningun "|". Pero yo se que cadena deberia recibir.. y siempre es un string separado en 2 por un caracter "|". Asi que, sabiendo eso.. si la cadena llega completa.. no deberia dar errores.. ;)


En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #22 en: 3 Abril 2013, 12:30 pm »

A ver si esto te ayuda.

Código
  1. .section .data
  2.  
  3. data: .ascii "ab|cdefg"
  4.  
  5. .section .text
  6. .globl _start
  7.  
  8. _start:
  9.  
  10. movl $data, %edi
  11. pushq %rax
  12. movq %rsp, %rbx
  13.  
  14. _C.0:
  15.  
  16. incb %dl
  17. scasb
  18. jne _C.0
  19. subl %edx, %edi
  20. decb %dl
  21. movb %dl, %r8b
  22. pushq %rdi
  23. popq %rsi
  24.  
  25. _C.1:
  26.  
  27. lodsb
  28. cmpb $0x7c, %al
  29. je _C.3
  30. movb %al, (%rbx)
  31.  
  32. _C.2:
  33.  
  34. incb %bl
  35. decb %dl
  36. jnz _C.1
  37. subb %r8b, %bl
  38.  
  39. pushq $0x1
  40. popq %rdi
  41. pushq %rbx
  42. popq %rsi
  43. movb %r8b, %dl
  44. movb $0x4, %al
  45. syscall
  46.  
  47. movb $0x1, %al
  48. syscall
  49.  
  50. _C.3:
  51.  
  52. movb $0x0a, (%rbx)
  53. jmp _C.2

Un saludo.
« Última modificación: 29 Abril 2013, 01:20 am por cpu2 » En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #23 en: 27 Mayo 2013, 18:49 pm »

Revivo el tema para mostrar el siguiente código, apenas 31 bytes, se podría mejorar para que eliminara más de un carácter.

Código
  1. _split:
  2.  
  3. xorl %edx, %edx
  4.  
  5. _C.1:
  6.  
  7. incl %edx
  8. scasb
  9. jne _C.1
  10.  
  11. _C.2:
  12.  
  13. subl %edx, %edi
  14. decl %edx
  15. pushl %edx
  16. movl %edi, %esi
  17.  
  18. _C.3:
  19.  
  20. lodsb
  21. cmpb $0x7c, %al
  22. je _C.4
  23. stosb
  24. jmp _C.5
  25.  
  26. _C.4:
  27.  
  28. movb $0x00, (%edi)
  29. incl %edi
  30.  
  31. _C.5:
  32.  
  33. decl %edx
  34. jnz _C.3
  35. popl %ebx
  36. subl %ebx, %edi
  37. retl

Cargar la dirección en edi y la función te retorna un puntero en el mismo edi.

Un saludo.
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #24 en: 27 Mayo 2013, 23:23 pm »

Código
  1. mov eax, 'b'
  2.  
  3. mov edi, cadena
  4.  
  5. bucle:
  6. scasb
  7. jne bucle
  8.  
  9. mov byte[edi-1], 0
  10. mov eax, edi
  11. sub eax, cadena
  12.  

No sé si eso te puede valer pero ocupa 27bytes. Lo quCreo que puede hacerse aún más cortoe hace es reemplazar el caracter por el el caracter nulo y devuelve el eax la posición donde comienza la segunda cadena.

Sa1uDoS
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con la función de "previsualizar fotograma"
Diseño Gráfico
nichihack 0 1,807 Último mensaje 5 Febrero 2005, 01:26 am
por nichihack
[Ayuda] modificar "start page" en "internet explorer" con "batch"
Scripting
taton 7 17,288 Último mensaje 20 Septiembre 2006, 01:45 am
por taton
Duda con "Split"
Programación Visual Basic
HJZR4 6 2,214 Último mensaje 2 Noviembre 2007, 02:21 am
por elmaro
Ayuda T_T alguien sabe como usar la funcion "kbhit()"?
Programación C/C++
Ai Toi 2 11,684 Último mensaje 19 Julio 2015, 17:07 pm
por Nico01
Ayuda con funcion de "click" en raton
.NET (C#, VB.NET, ASP)
j0lama 1 2,177 Último mensaje 29 Julio 2015, 14:22 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines