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)
| | | |-+  Ayuda con funcion "Split"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con funcion "Split"  (Leído 4,263 veces)
Vaagish


Desconectado Desconectado

Mensajes: 654



Ver Perfil
Ayuda con funcion "Split"
« en: 26 Marzo 2013, 23:09 »

Buenas amigos del foro.. Espero que anden bien.. :)

Bueno, creo que hoy la duda esta clarisima,, preciso dividir un string con un criterio dado,, asi, tal cual lo haria vb con split.

Si a alguien se le ocurre algo, una idea por donde empezar, o mejor aun un pseudocodigo, o lo que sea jaja

Desde ya, muchas gracias! :)


En línea

Flamer


Desconectado Desconectado

Mensajes: 585


crack, crack y mas crack...


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #1 en: 27 Marzo 2013, 04:56 »

hola Vaagish los string en asm se manejan en posiciones de memoria no puedes manejarlos como el vb ejemplo:

Nota: los comandos y el code pueden estar mal llaque no estoy en la pc

si tienes la palabra "hola mundo hacking" en la posicion 00401000 y la quieres dividir seria.

Código:
.data?
parte1 db ?
parte2 db ?
parte3 db ?
.code
xor eax,eax
xor ebx,ebx
.while ebx <= 4
   mov eax, bytes ds prt[00401000+ebx]
   mov parte1,eax
   inc ebx
.endwhile
xor eax,eax
xor ebx,ebx
.while ebx <= 5
   mov eax, bytes ds prt[00401005+ebx]
   mov parte2,eax
   inc ebx
.endwhile
xor eax,eax
xor ebx,ebx
.while ebx <= 7
   mov eax, bytes ds prt[0040100C+ebx]
   mov parte3,eax
   inc ebx
.endwhile
lo que ase este code es guardar la palabra "hola" en la variable parte1 y la palabra "mundo" en parte2 y "hacking" en parte3

saludos flamer y para unir es a la biseversa


En línea

Por Que Temes A La Muerte Si Una Eternidad Estubistes Muerto Ya...
Vaagish


Desconectado Desconectado

Mensajes: 654



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #2 en: 27 Marzo 2013, 05:21 »

Gracias Flamer por la respuesta, me es de gran ayuda para empezar, es que aun soy muy noob en esto de ASM.
El unico detalle es que mi code no tiene una cadena predefinida, y yo preciso cortar la cadena con un delimitador dado..
Seguro sabras de que hablo.. mi cadena llega algo asi, por ejemplo: "Mnsj|Ola keace", yo preciso :

Parte1 = "Mnsj"
Parte2 = "Ola keace"

A lo mejor, con darme una idea como "retocar" ese code y yo me manejo.. si no puedo preguntare otra vez jejeje

Gracias!!  

EI: juntando mensajes.

Y ya que estoy en el hilo, me tomo el atrevimiento de hacer una consulta bien, pero bien noob..
El operador xor, por lo que entiendo:

Devuelve True si                                         
a = true y b = false                                   
a = false y b = true   

Y False si:
a = true y b = true
a = false y b = false

pero.. para que sirve en este caso por ejemplo?

EDITADO: Ta, ya entendi para que sirve xor :)
« Última modificación: 27 Marzo 2013, 09:08 por Eternal Idol 7D » En línea

Flamer


Desconectado Desconectado

Mensajes: 585


crack, crack y mas crack...


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #3 en: 27 Marzo 2013, 06:28 »

el xor por si lo entendistes mal o de otra forma te lo explico yo lo uso para dejar los registros en cero y el codigo que te puse arriba es para separar las palabras guardandolas en las variables parte1, 2, 3.

y por otro lado te deje el ejemplo para que te guies por ti mismo no puedo aserte todo el codigo y si tienes dudas aqui te dejo un link donde encontraras varios tutoriales te recomiendo el de radasm

ricardonarvaja.info/WEB/OTROS/PROGRAMACION/TEORIAS%20SOBRE%20PROGRAMACION%20EN%20ASSEMBLER/


saludos flamer y si te atoras pregunta
En línea

Por Que Temes A La Muerte Si Una Eternidad Estubistes Muerto Ya...
Vaagish


Desconectado Desconectado

Mensajes: 654



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #4 en: 27 Marzo 2013, 07:17 »

Excelente recopilacion de tutos! Hoy de tarde los veo con tiempo!
Si, estoy usando el RadASM,, es muy bueno.. y por ahi vi en ese enlace que me mandaste que hay unos tutos de RadASM, me viene impeca para ampliarme mas en ese IDE...
Con respecto al code creo que voy a poder adaptarlo.. ;)

Gracias sabio! Abrazo!

Y larga vida al rey ASM ! Jejeje
En línea

cpu2


Desconectado Desconectado

Mensajes: 725


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #5 en: 27 Marzo 2013, 10:52 »

Hola

Esto puede ayudarte.

Código
  1. .section .data
  2.  
  3. cadena:
  4. .ascii "dddabbb"
  5.  
  6. .section .text
  7. .globl _start
  8.  
  9. _start:
  10.  
  11. push cadena
  12.  
  13. _C.0:
  14.  
  15. incq %rsp
  16. cmpb $0x61, (%rsp)
  17. jne _C.0
  18.  
  19. incq %rsp
  20. movl (%rsp), %edi
  21. incb %al
  22. syscall

Si quieres que copie las "d", elimina el inc de la línea 19 y el mov dejalo así

Código
  1. movl -0x4(%rsp), %edi

Es un ejemplo que hice, se puede mejorar mucho más.

Un saludo.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 654



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #6 en: 27 Marzo 2013, 22:09 »

Hola gentes!
La verdad queria hacerlo solo, pero esto me esta rompiendo la cabeza..

Tengo un problema con esta instruccion: mov eax, dword ptr [Cadena + ebx]

Veamos,, esto deberia poner la direccion de memoria de mi cadena en el registro eax, no ??

Pero si hago esto:

mov OtraVar, eax
messagebox OtraVar

Me muestra los 4 primeros caracteres de mi Cadena..
No estoy utilizando while, ni nada.. quedaria asi:

   xor eax, eax
   xor ebx, ebx
   
   mov eax, dword ptr [Cadena + ebx]
   mov Texto, eax
   invoke MessageBox, NULL, addr Texto, addr Titulo, MB_OK

Resultado "Esta" -> 4 primeros caracteres de mi Cadena

Como deberia recorrer el string caracter por caracter ? Yo me encargo del cmp, del jmp y todo lo demas :D

Graciass !! Y Gracias cpu2 tambien pero eso es fasm, no? apenas puedo con masm aun jejeje
En línea

MCKSys Argentina
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #7 en: 27 Marzo 2013, 23:12 »

Si tienes un buffer (Cadena), puedes usar la palabra offset para hacer referencia a la posicion donde esta.

Código:
mov eax, offset Cadena

Hace que eax apunte al primer byte de la cadena.

Ahora

Código:
mov eax, dword ptr [Cadena]

Hace que eax contenga "el dword que esta apuntado por" Cadena, osea los 4 primeros bytes de la misma.

Para recorrer el stringz char x char hay muchos metodos. Lo que hice YO al principio, fue hacer un programa que usaba las macros de masm (fijate el folder doc de la instalacion de masm), use StrCopy (no recuerdo bien cual fue con certeza), compile y miré el asm con Olly.
En línea

MCKSys Argentina

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

Flamer


Desconectado Desconectado

Mensajes: 585


crack, crack y mas crack...


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #8 en: 28 Marzo 2013, 00:09 »

hola aqui un codigo aver si te funciona ya que no estoy en la pc pero llegando a casa si esta mal lo soluciono.
El codigo debe de imprimir un msgbox en pantalla de cada letra dime si te funciona
Código:
.data
Titulo db "Mensage hola",0
Cadena db "hola mundo hacking",0
.code
   xor eax, eax
   xor ebx, ebx
   .while ebx <= 18
   mov eax, bytes ds ptr [Cadena + ebx]
   invoke MessageBox, NULL, addr eax,
addr Titulo, MB_OK
   inc ebx
   .endwhile

saludos flamer y cualquier duda pregunta
En línea

Por Que Temes A La Muerte Si Una Eternidad Estubistes Muerto Ya...
Vaagish


Desconectado Desconectado

Mensajes: 654



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #9 en: 28 Marzo 2013, 00:30 »

Gracias por las respuestas a todos!!

No me funco eso Flamer, me dice un error que ya me habia salido, en tantas pruebas que he echo.. me dice:

missing operator in expression -> mov eax, byte ds ptr [Cadena + ebx]

miren como va la cosa, asi me pueden decir si voy bien :)

.code

Inicio:

   xor eax, eax
   xor ebx, ebx
   mov eax, offset[Cadena]
   
.while ebx < 4
   
   mov eax, byte ptr [eax+1]  -> Se que aca deberia sumar ebx, pero no funca
   cmp eax, '|'
   je Corta
   mov Texto, eax
   inc ebx   
   
.endw

Corta:
   invoke dwtoa, eax, addr Texto
   invoke MessageBox, NULL, addr Texto, addr Titulo, MB_OK
   invoke ExitProcess, 0

end Inicio

Si pongo como decis tu Flamer me dice missing op. y si pongo +1 me dice invalid instruction.. Me quiere enfermar jajaja

Bueno, por otro lado tambien precisaria que el while se ejecute hasta el tamaño del string,, no solo hasta 4 :/

Pd: Gracias MCKSys tambien por el aporte, ya comprendi el tema dword y el byte ;)
« Última modificación: 28 Marzo 2013, 00:39 por Vaagish » En línea

Flamer


Desconectado Desconectado

Mensajes: 585


crack, crack y mas crack...


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #10 en: 28 Marzo 2013, 00:42 »

como te dije dame tiempo de llegar a mi casa y te lo pongo bien

saludos flamer y dame tiempo
En línea

Por Que Temes A La Muerte Si Una Eternidad Estubistes Muerto Ya...
cpu2


Desconectado Desconectado

Mensajes: 725


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #11 en: 28 Marzo 2013, 01:02 »

Hola gentes!
Como deberia recorrer el string caracter por caracter ? Yo me encargo del cmp, del jmp y todo lo demas :D

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ódigo
  1. _C.0
  2.  
  3. lodsb
  4. cmpb $0x7c, (%rsi)
  5. 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 Desconectado

Mensajes: 654



Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #12 en: 28 Marzo 2013, 01:15 »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 2.297


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con funcion "Split"
« Respuesta #13 en: 28 Marzo 2013, 05:21 »

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."

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

Ir a:  

Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines