Linux虚拟机中关于程序的链接

Linux虚拟机中的链接

首先我们要了解一些编译和链接中会遇到的一些词汇
符号表:存放符号的地方
符号:函数、全局变量、静态变量
ELF:可执行可链接格式

我们在Linux虚拟机下建立一个sum.c文件,代码如下:

int sum(int *a,int n)
{
int i,s=0;
for(i=0;i<n;i++)
{s+=a[i];}
return s;
}

接下来打开终端,输入以下命令
命令:
gcc -c sum.c
sum.c 将sum.c文件变成可重定位目标文件sum.o
readelf -h sum.o 显示ELF头的详细内容

在这里插入图片描述
在ELF文件里面,每一个 sections 内都装载了性质属性都一样的内容,比方:1) .text section 里装载了可执行代码;
2) .data section 里面装载了被初始化的数据;
3) .bss section 里面装载了未被初始化的数据;
4) 以 .rec 打头的 sections 里面装载了重定位条目;
5) .symtab 或者 .dynsym section 里面装载了符号信息;
6) .strtab 或者 .dynstr section 里面装载了字符串信息;
7) 其他还有为满足不同目的所设置的section,比方满足调试的目的、满足动态链接与加载的目的等等。
一个ELF文件中到底有哪些具体的 sections,由包含在这个ELF文件中的 section head table(SHT)决定。在SHT中,针对每一个section,都设置有一个条目,用来描述对应的这个section,其内容主要包括该 section 的名称、类型、大小以及在整个ELF文件中的字节偏移位置等等。
接下来使用 readelf 工具来查看可重定位对象文件 sum.o 的SHT表内容:
readelf -S sum.o 显示节头信息
在这里插入图片描述
看了这些信息之后我们可以总结出一下内容:
在这里插入图片描述
readelf -s sum.o 显示符号表段中的项
在这里插入图片描述
从这里可以看出只有sum()是符号
objdump -d sum.o sum函数汇编后的机器码用16进制的表示
在这里插入图片描述
objdump -h sum.o 打印obj文件的几个简单的段
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值