Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: LaiaxanIV en 29 Marzo 2016, 19:21 PM

Título: Modificar registros a partir de C
Publicado por: LaiaxanIV en 29 Marzo 2016, 19:21 PM
Muy buenas a todos!
Os cuento el problema que tengo. Unos compañeros y yo estamos desarrollando un pequeño Sistema Operativo. Nos hemos aventurado en la gestión de procesos y estamos encallados ya que no sabemos como hacer el task switch.
A la hora de cambiar la pila de ejecución necesitamos modificar el registro %ebp por el Kernel_Esp (que apunta a la cima de la pila del proceso anterior). Tenemos una macro Kernel_Esp que nos devuelve este puntero, pero necesitamos ponerlo dentro de %ebp.

Tenemos:

Dword d = Kernel_Esp((union task_union*) t)
__(asm)__{
   "movl d,%ebp"    //Esto obviamente no es correcto
}


Hemos visto algunas formas parecidas a:

Dword d = Kernel_Esp((union task_union*) t)
__(asm)__{
   "movl %0,%ebp" : "=r" (d)    //Compila, pero no sabemos si funciona
}


Pero no sabemos si es esto lo que buscamos.
En resumen, buscamos una manera de introducir una variable dentro de un registro.
Título: Re: Modificar registros a partir de C
Publicado por: fary en 29 Marzo 2016, 21:52 PM
En sintaxis de intel sería así:

Código (asm) [Seleccionar]
mov ebp, [d]

Ahora sí, en AT&T ni idea.

saludos.