"程序计数器"和"起始地址"之间的区别

Ran*_*lue 7 c embedded gdb

我正在使用GDB在嵌入式设备上加载可执行文件.加载可执行文件时,GDB说:

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
Run Code Online (Sandbox Code Playgroud)

据我所知,这pc是指令指针.我假设"起始地址"是起始地址pc.然而,在信息GDB是给我,起始地址(为0x8000000,这是偶然一样.text)是一样的pc(0xf0094902).

pc和起始地址有什么区别?让起始地址相同是否有意义.text

old*_*mer 5

我假设程序计数器是您加载后但开始运行之前的当前值.当你开始运行时,那么当然取决于处理器,但它很可能描述了开始执行加载代码的地址,在允许处理器再次运行之前设置程序计数器的地址.如果你运行然后快速停止你应该在.text范围内看到pc 0x80000000 + 0x16240的东西


Cli*_*ord 3

这里所说的“起始地址”是二进制映像的起始地址,而不是执行起始地址。执行的起始地址是复位向量中保存的任何内容(假设您像以前一样使用 Cortex-M3?)。