• Viernes 29 de Marzo de 2024, 14:59

Autor Tema:  Metiendo "texto" En La Pila  (Leído 2581 veces)

SeSoX

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Metiendo "texto" En La Pila
« en: Martes 16 de Diciembre de 2003, 02:13 »
0
:hola:  Buenas a todos!!

NOTA: acabo de empezar con asm y no tengo ni puta idea :unsure:

Pues lo que quiero hacer es un pekeñisimo programa que cree un directorio, lo estoy intentando hacer desde linux y ya se como va todo, pero no se como meter el nombre del directorio sin usar la seccion data, lo quiero hacer metiendo el nombre del directorio en la pila, me da igual que el nombre del directorio sea un numero.....

He visto un ejemplo q utiliza lo siguiente:

    pushl     $0x0
    pushl     $0x37333331

y luego accede a esos datos para crear un directorio llamado 7331 pero no entido pq ocurre esto, como podria crear un directorio llamado 11737 y si se podria llegar a crear un directorio con texto (de nombre "nuevo_dir" por ejemplo) con esta tecnica.

Gracias!

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Metiendo "texto" En La Pila
« Respuesta #1 en: Martes 16 de Diciembre de 2003, 05:13 »
0
En linux ni idea.


Pero por lo que dices podria adivinar que :

supongo que haras una llamada a una funcion en linux para qrear el directorio(creo que en la int 80h esta todo), pues tambein supongo que le pararas el para metro del nombre del nuevo directorio, y por lo que dices supongo que el paso de parametros es por PILA.

El primer dato es 0x0; entoces debe trabajar on cadenas asciiZ(una cadena d ecaracteres que termina en cero) pues lo que debes empilar seria(digo yo) el valor de las caracteres ascii de la cadena o nombre del directorio

push $0x434f534153

esto seria la cadena 'COSAS', y seria el nombre del directorio


67=C;79=O;83=S;65=A;83=S

SeSoX

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Metiendo "texto" En La Pila
« Respuesta #2 en: Martes 16 de Diciembre de 2003, 13:44 »
0
rlz!!! asi va perfecto! me hice un prog en c para psar de caracter a hexa y con eso ya puedo
mirar como seria un nombre en hexa. Gracias tio!!!  :rolleyes:

el programa me keda asi, y me crea el directorio COSA

main:
    pushl    $0x0
    pushl    $0x41534f43
    movl     $0x1ed, %ecx
    movl     %esp, %ebx
    movl     $0x27, %eax
    int        $0x80
    xorl      %ebx, %ebx
    movl     $0x1, %eax
    int        $0x80

Por cierto, con cada pushl puedo crear un directorio de 4 caracteres pero y si quiero que sea de 6 ? es que si es de 4,8,12... pues meto un pushl  y listo, pero si tengo q meter solo medio pushl ? sabes como podria hacerlo ? :huh:

Martin Candurra

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Metiendo "texto" En La Pila
« Respuesta #3 en: Martes 16 de Diciembre de 2003, 18:50 »
0
Tu problema esta en que a las llamadas al sistema se les pasa via el stack los parametros por REFERENCIA, no por valor.
Esa direccion es en la que se encuentra el string que representara el nombre, el cual debera terminar en null ('\0').
Busca un articulo en google llamdado Smashing the stack for fun & profit, en el cual alph1 explica como llamar a exec pasando el argumento residiendo este en el stack.
Te lo explicaria, pero estando explicado por un grande, no tiene sentido que repita lo mismo y encima deformandolo.

SeSoX

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Metiendo "texto" En La Pila
« Respuesta #4 en: Jueves 18 de Diciembre de 2003, 16:43 »
0
Buenas Martin, el texto de aleph1 asi como otros textos del mismo tipo ya me he leido, estoy intentando sacar probecho de todos para aprender.....
Pero es que muchas vesces me resulta complicado saber como se pueden hacer cosas concretas.
En el codigo que he pasteado en el post anterior, ya me ejecuta la funcion y me mete el texto en la pila, solo que con esa tecnica solo puedo meter texto de 4 en 4 caracteres, es decir nombres como COSA, ROSA, CASAVERD y bueno, lo que pregunte fue como meter una palabra como MICASA con la cual tendria que hacer un pushl y luego en el otro meter solo 2 caracteres... pero claro, no puede meter esos 2 caracteres y luego nulos, habria que hacer de otra forma ¿como? pues no lo se jejeje.
No se si me he explicado pq casi no me entiendo ni yo, pero bueno ya hare pruebas para sacarlo.

Un saludo ;D

Martin Candurra

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Metiendo "texto" En La Pila
« Respuesta #5 en: Viernes 19 de Diciembre de 2003, 13:19 »
0
Con que fin queres meter texto en la pila ? Que es la pila para vos ?
Si definis una variable local en C, esa variable está en el stack.
En Asm deberías hacer (sintaxis NASM)

segment STACK
comienzo_stack:
mensaje_en_stack db 'Este es mi mensaje en el stack',0
largo_stack reserve  128
LARGO_STACK   EQU   $ - comienzo_stack

Ya tenes el texto que querias en el stack, en el segmento STACK, offset mensaje_en_stack. Cuando quieras llamar a write, por ejemplo:
write(fd, void *buffer, size_t len)

En ECX vas a tener que poner la direccion de buffer:

mov ax, STACK
mov bx, mensaje_en_stack
shl ax, 4
add eax, ebx
mov ecx, eax             ;Aca tenes la direccion absoluta del string que esta en tu stack en el registro ecx.

La cosa es bastante simple. No logro comprender con que tenes problemas