Programación General > ASM (Ensamblador)

 Metiendo "texto" En La Pila

(1/2) > >>

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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa