运行程序时,会从该程序的可执行文件对进程进行实例化。该进程在其地址空间中具有许多区域,其中一些区域是文本,表示可执行指令,而另一些区域是通常不执行的数据。 在调用堆栈中记录的 PC 通常对应于程序的某个文本段中的地址。
进程中的第一个文本段从可执行文件本身派生。其他文本段对应于与可执行文件一起装入(在启动进程时,或由进程动态装入)的共享对象。调用堆栈中的 PC 基于记录调用堆栈时装入的可执行文件和共享对象进行解析。可执行文件和共享对象非常类似,它们统称为装入对象。
由于可以在程序执行过程中装入和卸载共享对象,因此在运行期间的不同时间,任何给定的 PC 可能对应于不同的函数。 此外,当卸载共享对象,然后在不同地址上重新装入它时,不同时间的不同 PC 可能对应于同一函数。