Ensamblador - Abrir un shell en Linux

 
Vista:

Abrir un shell en Linux

Publicado por David Fonseca (2 intervenciones) el 17/05/2005 02:04:10
Quisiera saber, como abrir una terminal o shell en Linux, tengo algo que podría servir, pero me da un error de "violacion de segmento". Estoy trabajando, en un Pentium 4, sobre redhat 9.0

.globl _start
_start:
xorl %eax, %eax
xorl %ebx, %ebx
xorl %ecx, %ecx
movb $4, %al
movb $1, %bl
pushl %ecx
pushl $0x0a786564
movl %esp, %ecx
xorl %edx, %edx
movb $4, %dl
int $0x80

Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Abrir un shell en Linux

Publicado por Ge-ergon (46 intervenciones) el 18/05/2005 07:16:11
Hola!
No se que función estas usando (eax = 0 ¿?)
Los ejemplos que encontre en la documentación de Linux Mandrake 8, me llevan a tomar en cuenta dos funciones que pueden ser de utilidad:

1. int system (const char * string) En libreria <stdlib.h>

2. int execve (const char *filename, char *const argv [],
char *const envp[]); En libreria <unistd.h>

Para la primera opción no encuentro el numero de la llamada para
ejecutar con int 0x80. :-(

Pero puede funcionar(no lo he probado) con la segunda opción.
El valor número de la función es OBh, sola cargale este valor y pasa por parámetro en los registros respectivos los datos que definidos arriba.
En segundo parametro argv se refiere a la lista de argumentos para el "filename" a ejecutar, el parámetro envp se refire a las variables de entorno que se desean cargar. Estos parametros pueden ser igual a cadena vacia si se desea.

Intenta probarlo de esta manera, ademas no has mencionado que assembler estas usando. Yo voy a probarlo con el Fasm 1.60 y Mandrake 8.0 luego te informo.

Bueno, todo esto si lo que deseas es abrir un shell como sh o ksh, o ejecutar incluso un comando como ls de la forma sh -c ls.

Muchas Gracias por su tiempo!
Att:Geergon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamadas a system Call

Publicado por Ge-ergon (46 intervenciones) el 18/05/2005 07:30:52
Hola!
Aqui les dejo una breve explicación de las llamadas a las system calls en linux utilizando assembler.
Para invocar una llamada del sistema en linux se necesita cargar en los registros los páarametros, en el registro EAX se carga el número de la función (todos tiene uno, ejem write = 4). Luego se llama a la interrupción 80 (int 80h). La mayoria de los resultados son devueltos en EAX.
Si se lee la documentación de las llamadas al sistema de linux, se muestra que todas las funciones estan descritas usando el lenguaje C. Sin embargo es muy sencillo pasarlas a assembler solamente carguen la constante del numero de la función en EAX, y carguen los registros con los parametros de la siguiente manera.
1 parametro: EBX
2 parametro: ECX
3 parametro: EDX
4 parametro: ESI
5 parametro: EDI
Algunes veces se pueden especificar un sexto parametro, para ello se utiliza el regirstro EBP.
Luego solamente llame al la interrupción 80h y listo.

Copio un ejemplo que viene con el Fasm:
; fasm demonstration of writing simple ELF executable
format ELF executable
entry start
section readable writeable
msg db 'Hello world!',0xA
msg_size = $-msg
section readable executable
start:
mov eax,4
mov ebx,1
mov ecx,msg
mov edx,msg_size
int 0x80
mov eax,1
xor ebx,ebx
int 0x80

Att: Ge-ergon.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar