关于可重定位目标文件

一.目标文件有三种类型:
1.可重定位目标文件
2.可执行目标文件
3.共享目标文件

本次试验要用到的代码:
1.main.c
在这里插入图片描述
2.sum.c
在这里插入图片描述
二.
(1)首先执行命令:gcc -c sum.c 得到 sum.o
然后执行命令:readelf -s sum.o得到符号表(这里因为没有链接所以 Value都为0)
在这里插入图片描述
Value:在对应节的偏移。
Size:目标的大小。
type:函数或变量。
Bind:表示全局变量还是局部变量。
Ndx:符号所在的节。
Name:符号的名字。

(2)执行gcc -h sum.o 得到 头结构表
在这里插入图片描述
Class:表示该elf文件的类型。
Data:表示文件中的数据的组织方式为大端还是小端。
Type:表示该文件的类型。REL表示该文件为可重定位目标文件。
Entry point address:程序的虚拟地址入口。
Start of program headers:程序头的开始处。
Start of section headers:段头的开始处。
(3)执行readelf -S sum.o 得到
在这里插入图片描述
首地址 节名称 Size
00000000 ELF头 0
00000040 .text 45
00000085 .rodata 0
00000085 .bss 0
00000085 .comment 36
000000bb .note.GUN -stack 0
000000c0. .eh_frame 38
000000f8 .symtab d8
000001d0 .strtab b
000001e0 .rela.eh_frame 18
000001f8 .shstrtab 54

(4)执行gcc -c main.c 得到 main.o
接着执行objdump -d main.o 得到
在这里插入图片描述
可以发现main无法找到sum的位置;而我们接着执行gcc -o prog main.c sum.c 得到 可执行文件prog
再输入objdump -d prog 得到
在这里插入图片描述
可以发现此时main中为08000000,可以找到sum的位置。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值