Foros del Web » Programación para mayores de 30 ;) » Programación General »

Leer registro PC (contador de programa) en C

Estas en el tema de Leer registro PC (contador de programa) en C en el foro de Programación General en Foros del Web. Saludos. Estoy desarrollando un monitor de memoria para una practica de la facultad. La practica la estoy haciendo en Linux (por si ayuda). Necesito saber ...
  #1 (permalink)  
Antiguo 09/01/2005, 05:36
 
Fecha de Ingreso: enero-2005
Mensajes: 6
Antigüedad: 19 años, 3 meses
Puntos: 0
Leer registro PC (contador de programa) en C

Saludos.

Estoy desarrollando un monitor de memoria para una practica de la facultad. La practica la estoy haciendo en Linux (por si ayuda). Necesito saber si una instruccion del programa q se va a monitorizar genera dos SEGV seguidos. Es decir se genera un SEGV y a continuacion la misma instruccion genera otro.
Lo unico q se me ha ocurrido es comprobar en la rutina de tratamiento de SEGV si el valor del contador de programa (PC) no ha cambiado.

¿Hay alguna manera de leer el registro PC (contador de programa) del computador utilizando alguna funcion de C? ¿Necesito importar alguna libreria? ¿Cual?

Si se os ocurre otra forma de solucionar esto (si es q habeis entendido el problema, xq creo q no lo he expresado muy bien :) ) agradeceria mucho las sugerencias.

Muchas gracias.


"La violencia es el ultimo recurso del incompetente."
Salvor Hardin.

Última edición por Pulley; 09/01/2005 a las 06:01 Razón: añadir mas info
  #2 (permalink)  
Antiguo 09/01/2005, 05:58
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Esta sería una forma:

Código:
unsigned int Eip = 0;
__asm
{
  here:
  mov eax, here
  mov Eip, eax
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 09/01/2005 a las 06:03
  #3 (permalink)  
Antiguo 09/01/2005, 06:08
 
Fecha de Ingreso: enero-2005
Mensajes: 6
Antigüedad: 19 años, 3 meses
Puntos: 0
Una duda

Gracias por contestar Eternal Idol.

Tengo una duda: la solucion q planteas seria incluir codigo en ensamblador, no?
Como se trata de una practica para la uni, en el momento de la correcion, no se q caracteristicas tendra la maquina en la q la corrijan. No necesito conocer perfectamente la arquitectura del computador para usar ensamblador?
No tengo mucha idea de ensamblador, asi q puede q me equivoque.

Gracias.
  #4 (permalink)  
Antiguo 09/01/2005, 06:10
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Mientras se ejecute en un x86 funcionará, no importa el S.O. en este caso al ser algo tan básico, dependiendo del compilador que uses tal vez inclúso te deje referirte a el registro EIP sin hacer este 'truco' de la etiqueta, yo en C solo trabajo con VC++ y no te lo permite pero por supuesto MASM si.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 09/01/2005, 06:56
 
Fecha de Ingreso: enero-2005
Mensajes: 6
Antigüedad: 19 años, 3 meses
Puntos: 0
No me funciona

He probado incluyendo el codigo q pusistes. No me compila.
Intuyo q la sentencia "__asm" indica q el siguiente fragmento de codigo es ensamblador. No tendria q importar alguna libreria? Creo q soy un poco ignorante respecto a este tema.
De todas maneras alguien conoce alguna llamada al sistema (posix) o macro q permita acceder a los registros del computador?

Gracias por tu ayuda Eternal Idol
  #6 (permalink)  
Antiguo 09/01/2005, 07:58
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Si, es para eso, pero es la sintaxis que se usa en VC++.

Acá tenes dos links con información para hacerlo en gcc (supongo que usas ese compilador):

http://www-106.ibm.com/developerworks/library/l-ia.html
http://www.ibiblio.org/gferg/ldp/GCC...bly-HOWTO.html
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:50.