elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Modificar registros a partir de C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Modificar registros a partir de C  (Leído 934 veces)
LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Modificar registros a partir de C
« 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.


« Última modificación: 29 Marzo 2016, 23:19 pm por LaiaxanIV » En línea

fary
Colaborador
***
Desconectado Desconectado

Mensajes: 958



Ver Perfil WWW
Re: Modificar registros a partir de C
« Respuesta #1 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.


En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines