博客
关于我
PowerPC-object与elf中的符号引用
阅读量:797 次
发布时间:2023-03-04

本文共 1081 字,大约阅读时间需要 3 分钟。

编译原理:符号引用与数据引用

在编译过程中,程序的各个源代码文件会被分别编译成目标文件(如.obj或.o文件)。这些目标文件在最终编译或链接阶段会被链接到一个可执行文件中,形成最终的可执行格式(如.exe或.elf文件)。在这一过程中,程序会遇到许多符号引用问题,这些引用在目标文件中并不会确定最终的地址,只有在链接阶段才会被解析和重定位。

一、符号引用

符号引用是指程序中一种间接调用或使用的方式。例如,一个函数可能会调用另一个函数,或者一个变量可能会引用另一个变量。这些引用在目标文件中并不会直接指向函数或变量的实际地址,而是在链接阶段根据程序的需要重新定位这些引用。

二、函数引用实例

以main函数调用foo函数为例:

foo();

在编译时,main.o或main.obj文件中会包含对foo的引用。这些引用会以特定的方式记录下来,例如:

call foo

在目标文件中,这些引用会被编译器记录下来,但不会直接指向函数的实际地址。这些地址在链接阶段会被重新定位,最终形成一个完整的可执行文件。例如,foo的引用可能会被记录为:

call foo@rel24

这里的rel24表示这是一个需要重新定位的引用,rel是relocate的缩写。在最终的可执行文件(如.elf文件)中,这些引用会被解析为实际的地址。

三、数据引用实例

数据引用则是指程序中使用的数据结构或常量。例如,在C语言中,一个结构体可能会引用另一个结构体,或者一个函数可能会使用一个常量。这些引用也会在目标文件中被记录下来,但不会直接指向实际的地址。

以C99标准的示例代码为例:

struct a_struct {    int value;};struct b_struct {    struct a_struct *a_struct_ptr;};

在编译时,b_struct结构体会包含对a_struct的引用。这些引用会被记录在目标文件中,但不会直接指向a_struct的实际地址。在链接阶段,这些引用会被解析,并根据程序的需要重新定位。

四、目标文件中的引用

在目标文件中,符号引用和数据引用都会以特定的方式被记录下来。这些引用通常会被编译器和链接器解析和重定位,最终形成一个完整的可执行文件。例如,在.elf文件中,引用会被记录为实际的地址,这样在运行时可以正确地访问函数或数据。

五、总结

编译过程中,符号引用和数据引用在目标文件中不会直接指向实际地址。在链接阶段,这些引用会被解析并重新定位,最终形成一个完整的可执行文件。理解这些机制对于优化和调试程序都是非常重要的。

转载地址:http://ulxfk.baihongyu.com/

你可能感兴趣的文章
poj2478欧拉函数
查看>>
poj2546
查看>>
POJ2728 Desert King
查看>>
POJ2794 Double Patience[离散概率 状压DP]
查看>>
poj2828(线段树查找序列第k小的值)
查看>>
POJ2891:Strange Way to Express Integers——题解
查看>>
poj3045 Cow Acrobats(二分最大化最小值)
查看>>
poj3061 Subsequence(尺取法)
查看>>
poj3074 DLX精确覆盖
查看>>
poj3252(组合数)
查看>>
Qt笔记——QToolBox开发简易QQ聊天界面
查看>>
poj3307
查看>>
Qt笔记——QString与隐式共享、MVC架构
查看>>
Qt笔记——QSemaphore处理生产者/消费者模式
查看>>
Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
查看>>
Qt笔记——QLable+QPixmap图片缩放踩坑
查看>>
Qt笔记——foreach与forever
查看>>
QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
查看>>
Qt知识:视图框架QGraphicsWidget详解
查看>>
SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
查看>>