Foro de elhacker.net

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:
Código:
Dword d = Kernel_Esp((union task_union*) t)
__(asm)__{
    "movl d,%ebp"    //Esto obviamente no es correcto
}

Hemos visto algunas formas parecidas a:
Código:
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
  1. mov ebp, [d]

Ahora sí, en AT&T ni idea.

saludos.