Autor
|
Tema: Ayuda con funcion "Split" (Leído 14,208 veces)
|
Flamer
Desconectado
Mensajes: 1.052
crack, crack y mas crack...
|
como te dije dame tiempo de llegar a mi casa y te lo pongo bien
saludos flamer y dame tiempo
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Hola gentes! Como deberia recorrer el string caracter por caracter ? Yo me encargo del cmp, del jmp y todo lo demas A ver si lo entiendo porque la verdad esto se esta desviando, quieres mover carácter por carácter a eax no? Para luego imprimir cada carácter con la api messagebox? Sguiendo el código anterior hice esto aver si te puede ayudar _C.0 lodsb cmpb $0x7c, (%rsi) jne _C.0
Copia byte por byte a al "eax de 8 bit", hasta que se encuentre con "|" es eso lo que quieres? Y Gracias cpu2 tambien pero eso es fasm, no? apenas puedo con masm aun jejeje
De nada, se trata de la sintaxis de AT&T, los ejemplos son de 64 bits solo los tienes que traducir a nasm y 32 bits. Un saludo.
|
|
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
En realidad yo preciso una funcion que sea Split, sin mas.. yo le paso un string como parametro a la funcion y ella se encarga de Splitearla.. El tema de los mensajes de windows son solo para mostrar en pantalla como me queda la cadena X)
Luego veo el tema de la traduccion AT&T.. Si ya me complica masm.. imaginate que entiendo yo de eso jaja
Saludos !
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
Veo que no tienes en cuenta algunas cosas. Examinemos el problema: Quieres hacer en MASM lo mismo que en VB6: usar la función split. La función split toma un string de largo arbitrario (por sencillez diremos que es un string terminado en zero) y otro string, el cual NORMALMENTE es de largo 1 (por sencillez lo tomaremos como de largo 1). Lo que hace la función es partir el primer string en la posición de cada ocurrencia del segundo string. Cabe destacar que el string de separación (el segundo string) no se incluye en el resultado. Luego, las strings obtenidas se colocan en un array (matriz en vb) de strings. Faltan analizar los casos especiales, como por ej.: si no se encuentra el 2º string, pero por ahora basta con lo dicho. Ahora, para lo anterior, debes tener en cuenta lo siguiente: El array de cadenas: lo devuelves como puntero? Osea, la función se encarga de allocar la memoria, llenarla (partir la cadena) y devolver un ptr al array en eax? O mejor lo pides como parámetro? Si viene como parámetro: cuál debería ser el tamaño? Un array de strings en realidad sería un array de punteros, donde deberás especificar el tamaño, con lo que ya tendrías una estructura. Como ves, no es tan sencillo como suena, pero tampoco imposible. Te aconsejo mirar la carpeta HELP del MASM. En especial el archivo masmlib. Verás que la lib de MASM tiene muchas cosas que puedes usar y que te permitirán implementar esta función de una forma sencilla. Ejemplos que te podrían servir en este caso: create_array Create an array of pointers to a user defined array InString Find substring in zero terminated source string szWcnt Count the occurrence of text in a zero terminated string y la lista sigue y sigue... 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
|
Huu,, y yo de novato mandandome estas ocurrencias... Igual, creo que no seria para tanto MCK, te puedo decir MCK no ? jaja Bueno, a lo que voy.. Lo que hace la función es partir el primer string en la posición de cada ocurrencia del segundo string. No entiendo esa parte.. Lo que hace la funcion es partir una cadena, cuando encuentra un delimitador.. en este caso el caracter " | ". Asi mismo yo se que mi cadena solo se va a dividir en 2, y si en el futuro agrandase la funcion, bueno.. despues veo.. Voy a ser claro para que no de a confusion La cadena que preciso cortar puede ser por ejemplo: "CONNECT|Username" y comandos de ese tipo,,, supongo ya habran visto este tipo de cadenas en 1 millon de sources y se sobre entiende para que sirve.. Pd: voy a mirar eso que me dijiste y el enlace que hay por ahi arriba
|
|
« Última modificación: 28 Marzo 2013, 05:50 am por Vaagish »
|
En línea
|
|
|
|
Flamer
Desconectado
Mensajes: 1.052
crack, crack y mas crack...
|
Hola ya quedo el codigo .data Mensaje db "Hola mundo",0 Titulo db "Resultado",0 .data? Caracter db ? .code xor eax,eax xor ebx,ebx .while ebx<=10 mov al,byte ptr ds:[Mensaje+ebx] mov Caracter,al invoke messagebox,null,addr Caracter,addr Titulo,MB_OK inc ebx .endw
dime si te salta error ami mesale bien saludos flamer y dime como te fue
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
.section .data cadena: .ascii "cc|aa" .section .text .globl _start _start: movq $cadena, %rbx _C.0: incb %bl cmpb $0x7c, (%rbx) jne _C.0 movw -0x2(%rbx), %di incb %bl movw (%rbx), %si
Cuando encontrara "|" copiaría los carácteres "cc" a di, y "aa" a si. Más o menos es eso lo que pretendes no? Un saludo.
|
|
|
En línea
|
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Excelente amigos! Gracias por las respuestas a todos!! Yo pase 16 hs en querer resolverlo,, ya me tenia mal jaja Es exactamente eso lo que preciso cpu2 pero adaptado al code de flamer que funciona impeca.. asi que ahora me toca a mi unirlos jeje Gracias! Mr.blood, tambien me sirve de guia.. aca todo sirve, no hay desperdicios Gracias a todos! Ya volvere con alguna pregunta de novato jeje
|
|
|
En línea
|
|
|
|
Binary_Death
Desconectado
Mensajes: 214
|
Hacer una función split en la que el delimitador sea un carácter, sólo un carácter, es muy fácil. Tienes que recorrer la cadena byte a byte y comparar (hay instrucciones precisas en ASM que usan los registros ESI y EDI, muy útiles para estos casos).
Yo seguiría este procedimiento:
Reserva memoria para un array de punteros. Almacena la dirección inicial de la cadena a splitear en el primer elemento del array. Ahora vamos recorriendo la cadena y buscamos la primera ocurrencia del delimitador. En cuanto la encontremos, sustituimos el byte por un byte nulo (0x00) y aumentamos el contador para pasar al siguiente carácter, cuya dirección almacenamos en el siguiente elemento de nuestro array de punteros. Seguimos esto en bucle hasta encontrarnos con el final de la cadena.
Hecho esto, tendremos un bonito array de punteros cada uno apuntando a un trozo de la cadena, o mejor dicho, tendremos muchas cadenas almacenadas consecutivamente en memoria. Perfecto.
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda con la función de "previsualizar fotograma"
Diseño Gráfico
|
nichihack
|
0
|
1,830
|
5 Febrero 2005, 01:26 am
por nichihack
|
|
|
[Ayuda] modificar "start page" en "internet explorer" con "batch"
Scripting
|
taton
|
7
|
17,378
|
20 Septiembre 2006, 01:45 am
por taton
|
|
|
Duda con "Split"
Programación Visual Basic
|
HJZR4
|
6
|
2,223
|
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,715
|
19 Julio 2015, 17:07 pm
por Nico01
|
|
|
Ayuda con funcion de "click" en raton
.NET (C#, VB.NET, ASP)
|
j0lama
|
1
|
2,210
|
29 Julio 2015, 14:22 pm
por Eleкtro
|
|