โš™๏ธSYSTEM CALLS

Puede hacer uso de las llamadas al sistema Linux en sus programas de ensamblaje. Debe seguir los siguientes pasos para usar las llamadas al sistema Linux en su programa:

  • Ponga el nรบmero de llamada del sistema en el registro EAX.

  • Almacene los argumentos de la llamada al sistema en los registros EBX, ECX, etc.

  • Llame a la interrupciรณn correspondiente (80h).

  • El resultado generalmente se devuelve en el registro EAX.

Hay seis registros que almacenan los argumentos de la llamada al sistema utilizada. Estos son EBX, ECX, EDX, ESI, EDI y EBP. Estos registros toman los argumentos consecutivos, comenzando con el registro EBX. Si hay mรกs de seis argumentos, la ubicaciรณn de memoria del primer argumento se almacena en el registro EBX.

El siguiente fragmento de cรณdigo muestra el uso de la llamada al sistema sys_exit:

mov	eax,1		; Numero de llamadas al sistema (sys_exit)
int	0x80		; Llamada al kernel.

Veamos el uso de la llamada sys_wryte:

mov	edx,4		; Tamano del mensaje
mov	ecx,msg		; Escribir mensaje
mov	ebx,1		; Decriptor de archivo (stdout)
mov	eax,4		; Numero de llamadas al sistema (sys_write)
int	0x80		; Llamadas al kernel

Todas las llamadas al sistema se enumeran en /usr/include/asm/unistd.h , junto con sus nรบmeros (el valor que debe ingresar en EAX antes de llamar a int 80h).

La siguiente tabla muestra algunas de las llamadas al sistema utilizadas en este tutorial:

EAX
Name
EBX
ECX
EDX
ESX
EDI

1

sys_exit

int

-

-

-

-

2

sys_fork

struct pt_regs

-

-

-

-

3

sys_read

unsigned int

char *

size_t

-

-

4

sys_write

unsigned int

const char *

size_t

-

-

5

sys_open

const char *

int

int

-

-

6

sys_close

unsigned int

-

-

-

-

Modos de Direccionamiento

Una direcciรณn de operando proporciona la ubicaciรณn, donde se almacenan los datos que se van a procesar. Algunas instrucciones no requieren un operando, mientras que otras instrucciones pueden requerir uno, dos o tres operandos.

Cuando una instrucciรณn requiere dos operandos, el primer operando generalmente es el destino, que contiene datos en un registro o ubicaciรณn de memoria y el segundo operando es la fuente. La fuente contiene los datos que se entregarรกn (direccionamiento inmediato) o la direcciรณn (en registro o memoria) de los datos. Generalmente, los datos de origen permanecen inalterados despuรฉs de la operaciรณn.

Los tres modos bรกsicos de direccionamiento son:

  • Registrar direccionamiento

  • Direccionamiento inmediato

  • Direccionamiento de memoria

Registrar direccionamiento:

En este modo un registro contiene el operando. Dependiendo de la instrucciรณn, el registro puede ser el primer operando, el segundo operando o ambos.

Direccionamiento inmediato:

Un operando inmediato tiene un valor constante o una expresion. Cuando una instruccion con dos operandos usa direccionamientoinmediato, el primer operando puede ser un registro o ubicacion de memoria y el segundo operando es una constante inmediata. El primero define la longitud de los datos.

Direccionamiento de memoria:

Esta forma de direccionamiento da como resultado un procesamiento mรกs lento de los datos. Para ubicar la ubicaciรณn exacta de los datos en la memoria, necesitamos la direcciรณn de inicio del segmento, que generalmente se encuentra en el registro DS y un valor de compensaciรณn. Este valor de compensaciรณn tambiรฉn se denomina direcciรณn efectiva .

En el modo de direccionamiento directo, el valor de compensaciรณn se especifica directamente como parte de la instrucciรณn, generalmente indicado por el nombre de la variable. El ensamblador calcula el valor de compensaciรณn y mantiene una tabla de sรญmbolos que almacena los valores de compensaciรณn de todas las variables utilizadas en el programa.

En el direccionamiento directo de memoria, uno de los operandos hace referencia a una ubicaciรณn de memoria y el otro operando hace referencia a un registro.

Direccionamiento de Displazamiento Directo:

Es este modo se utiliza los operadores aritmeticos para modificar unadireccion:

Direccionamiento indirecto de memoria:

Este modo utiliza la capacidad de la computadora de direccionamiento Segmento: Desplazamiento . Los registros base EBX, EBP (o BX, BP) y los registros de indice (DI, SI) codificados enter corchetes para referencias de memoria.

Este dioreccionamiento generalmente se usa para variables que contienen varios elementos como matrices. La direccion inicial de la matriz se almacena, por ejemplo en el registro EBX.

El siguiente codigo mustra como acceder a diferentes elementos de la variable.

Instruccion MOV

Se usa para mover espacios de almcenamiento a otro. Esta instriccion toma dos operandos:

SINTAXIS:

Esta instruccion puede tener una de las siguientes cinco formas:

  • Ambos operandos en MOV deben de tener el mismo tamaรฑo.

  • El valor del operando fuente (source) permanece sin cambios.

Esta instruccion causa ambiguedad a veces. Por ejemplo:

No esta claro si desea mover un byte o una palabra equivalente al nuemro 110. En estos casos se aconseja utilizar un especificador de tipo.

Especificadores mas comunes:

Type Specifier
Bytes addressed

BYTE

1

WORD

2

DWORD

4

QWORD

8

TBYTE

10

Ejemplo: Vemos esto al momento de imprimir los siguientes datos:

รšltima actualizaciรณn