2012-03-22 11 views
7

Sto utilizzando GDB per caricare un eseguibile su un dispositivo incorporato. Quando si carica il file eseguibile, GDB dice:Differenza tra "contatore programma" e "indirizzo iniziale"

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 

quanto ho capito, il pc è il puntatore all'istruzione. Suppongo che "l'indirizzo iniziale" sia l'indirizzo iniziale per lo pc. Tuttavia, nelle informazioni che GDB mi fornisce, l'indirizzo iniziale (0x8000000, che incidentalmente è lo stesso di .text) è non uguale a pc (0xf0094902).

Qual è la differenza tra pc e l'indirizzo iniziale? Ha senso avere l'indirizzo iniziale uguale a .text?

+0

Dopo il caricamento, provare 'registri di informazioni' e controllare il valore di * pc *. Sospetto che @dwelch abbia ragione. I registri avranno qualcosa di significativo per la tua applicazione solo dopo aver eseguito 'run' su GDB. – karlphillip

risposta

3

L'"indirizzo iniziale" a cui si fa riferimento qui è l'inizio dell'immagine binaria, non l'indirizzo iniziale dell'esecuzione. L'indirizzo iniziale per l'esecuzione è qualsiasi cosa sia contenuta nel vettore di reset (supponendo che stai usando Cortex-M3 come prima?).

5

Suppongo che il contatore del programma sia il valore corrente dopo il caricamento, ma prima dello avviato. Quando si avvia, a seconda del processore, ovviamente, ma molto probabilmente descrive l'indirizzo per avviare l'esecuzione di quel codice caricato, l'indirizzo per impostare il contatore del programma prima di permettere al processore di funzionare di nuovo. Se corri allora fermati rapidamente dovresti vedere qualcosa nell'intervallo .text per il pc 0x80000000 + 0x16240

+0

Scommetto che l'avvio del PC è da qualche parte nel bootloader della ROM. – blueshift

1

Wikipedia: "A seconda dei dettagli di un determinato computer, il PC o l'IP detengono sia l'indirizzo di memoria dell'istruzione che eseguito, o l'indirizzo della prossima istruzione da eseguire. " Non posso esserne sicuro, ma forse sta tenendo le prossime istruzioni da eseguire.

EDIT:

Probabilmente potrebbe trovare la risposta rigth controllare la documentazione del processore. Ad esempio, nel microcontrollore MSP430, la condizione iniziale per il PC è l'indirizzo per il vettore di ripristino. Quindi controlla il tuo processore per trovare le condizioni iniziali dei registri.

+1

Varia da un processore all'altro, in particolare la visualizzazione dei programmatori del valore può avere una definizione in cui l'hardware può avere più di una copia per il recupero, una per il programmatore da utilizzare, ecc. La vista dei programmatori del contatore del programma è tipicamente documentato per ciascun processore. –

+0

Hai perfettamente ragione. – LuisEspinoza