gpt4 book ai didi

linker - PC 与加载或链接地址有什么关系?

转载 作者:行者123 更新时间:2023-12-02 05:45:50 27 4
gpt4 key购买 nike

链接地址是程序执行的地址,而加载地址是程序在内存中实际放置的地址。

现在我很困惑程序计数器的值是多少?是加载地址还是链接地址?

最佳答案

Link address is the address where execution of a program takes place

不,不是。

while load address is the address in memory where the program is actually placed.

有点。程序通常由多个指令组成,因此不能将其放置在单个“加载地址”处。

当人们谈论加载地址时,他们通常谈论的是可以(在运行时)重定位到任意加载地址的可重定位代码。

例如,我们来看一个链接在地址 0x20020 的程序,该程序由 100 条 4 字节指令组成,这些指令全部按顺序执行(例如,它是一个 ADD 序列) >s 后跟一个 SYSCALL 退出程序)。

如果这样的程序在地址0x20020处加载,那么在运行时程序计数器的值为0x20020,然后它将前进到处的下一条指令0x20024,然后到 0x20028,依此类推,直到到达程序的最后一条指令 0x201ac

但是,如果该程序加载到地址0x80020020(即,如果该程序从其链接地址重定位0x80000000),则程序计数器将从0x80020020,最后一条指令位于0x800201ac

请注意,在许多操作系统上,可执行文件不可重定位,因此必须始终加载到它们链接的相同地址(即使用重定位0;在这种情况下“链接地址”实际上是执行开始的地址),而共享库几乎总是可重定位的,并且通常链接在地址0处并且具有非零重定位。

关于linker - PC 与加载或链接地址有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33859072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com