2012-03-22 15 views
7

Estoy usando GDB para cargar un ejecutable en un dispositivo incrustado. Cuando se carga el ejecutable, el BGF dice:Diferencia entre "contador de programa" y "dirección de inicio"

xPSR: 0x01000000 pc: 0xf0094902 msp: 0x2001b508 
Loading section .text, size 0x16240 lma 0x8000000 
Loading section .data, size 0x8f0 lma 0x8016240 
Start address 0x8000000, load size 92976 

Según tengo entendido, el pc es el puntero de instrucción. Supongo que la "dirección de inicio" es la dirección inicial para el pc. Sin embargo, en la información que me proporciona GDB, la dirección de inicio (0x8000000, que es lo mismo que .text) es , no, lo mismo que pc (0xf0094902).

¿Cuál es la diferencia entre pc y la dirección de inicio? ¿Tiene sentido que la dirección de inicio sea la misma que .text?

+0

Después de cargar, intente 'info registers' y compruebe el valor de * pc *. Sospecho que @dwelch tiene razón. Los registros solo tendrán algo malo para su aplicación después de ejecutar 'ejecutar' en GDB. – karlphillip

Respuesta

3

La "dirección de inicio" a la que se hace referencia aquí es el inicio de la imagen binaria, no la dirección de inicio de la ejecución. La dirección de inicio para la ejecución es lo que se mantiene en el vector de reinicio (suponiendo que esté utilizando Cortex-M3 como antes).

5

Supongo que el contador del programa es el valor actual después de cargar pero antes de que comenzó a ejecutar. Cuando comiences a correr, dependiendo del procesador, por supuesto, pero lo más probable es que describa la dirección para comenzar a ejecutar ese código cargado, la dirección para configurar el contador del programa antes de permitir que el procesador vuelva a funcionar. Si ejecuta y se detiene rápidamente debería ver algo en el rango .text para la pc 0x80000000 + 0x16240

+0

Apuesto a que la PC inicial está en algún lugar del gestor de arranque ROM. – blueshift

1

Wikipedia: "Dependiendo de los detalles de la computadora en particular, la PC o IP mantiene la dirección de memoria de la instrucción siendo ejecutado, o la dirección de la próxima instrucción que se ejecutará ". No puedo estar seguro, pero tal vez esté sosteniendo la siguiente instrucción para ejecutar.

EDIT:

Probablemente se podría encontrar la respuesta rigth comprobación de la documentación de su procesador. Por ejemplo, en el microcontrolador MSP430, la condición inicial para la PC es la dirección del vector de reinicio. Por lo tanto, consulte el documento del procesador para encontrar las condiciones iniciales de los registros.

+1

Varía de procesador a procesador, en particular, la vista de los programadores del valor puede tener una definición donde el hardware puede tener más de una copia para buscar, una para que el programador la use, etc. La vista de los programadores del contador del programa es típicamente documentado para cada procesador. –

+0

Tienes toda la razón. – LuisEspinoza

Cuestiones relacionadas