ELF文件之二——使用链接脚本
main.c
int main()
{
;
}
编译:sparc-elf-gcc.exe -c main.c -o main.o
链接:sparc-elf-ld.exe main.o -nostartfiles -script=linkerscript.ld -o main.elf
linkerscript.ld
SECTIONS
{
. = 0x08000000;
.text : { *(.text) }
. = 0x70000000;
.data : { *(.data) }
.bss : { *(.bss) }
}
输出的main.elf文件
section header如下,

使用链接脚本后,text节大小与o文件一致,为20字节;
symtab有11个符号,相比o文件增加了3个,但比使用默认链接脚本少了很多(30个);
strtab大小与o文件一致
symbol table如下:

从最后一列可以看出该符号位于节头表的索引,
1为text,数值为0x08000000,为.text的地址,main函数位于text节,地址也为0x08000000(如果增加一个函数,其应该在另一个地址?)
2为.data,数值为0x70000000,为.data的地址
3为.bss,数值为0x70000000,为.bss的地址,由于没有data节,所以,.bss节的地址也为0x70000000
4、5、6、7节为辅助信息,不需要在内存中
ABS绝对地址包括main.c文件名和*ABS*(这个不知道是什么?)
program header

红色为入口点entry point,.text起始地址
程序头偏移为0x34,项目数量为2.
第一个项目偏移为0x74,大小为0x14=20字节,即main函数的长度,虚拟地址和物理地址都为0x0800 0000
第二个项目偏移为0x88,大小为0,即没有,因为没有data和bss节内容;虚拟地址和物理地址都为0x7000 0000(如果增加个全局变量应该就有东西了)
ELF文件之二——使用链接脚本的更多相关文章
- ELF文件之九——使用链接脚本-2个函数-data-bss-temp-call-debug信息-struct
main.c int enable; ; struct aaa { int membera; char memberb; }s_aaa; int main() { int temp; add(); d ...
- Linux链接脚本学习--lds
一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 每一个链接都被一个链接脚本所控制 ...
- Linux链接脚本学习--lds(转)
Linux链接脚本学习--lds 一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 ...
- ELF文件加载与动态链接(二)
GOT应该保存的是puts函数的绝对虚地址,这里为什么保存的却是puts@plt的第二条指令呢? 原来“解释器”将动态库载入内存后,并没有直接将函数地址更新到GOT表中,而是在函数第一次被调用时,才会 ...
- ELF文件之八——使用链接脚本-2个函数-data-bss-temp-call-debug信息
gcc编译选项可以设置生成调试信息, debug信息格式有stabs,coff,xcoff,dwarf. 常用的有两种格式,stab和dwarf,stab较早,dwarf较新.两种格式介绍:https ...
- ELF文件之三——使用链接脚本-2个函数
main.c int main() { ; } int add() { ; } main.o的比较 与之二相比,section header offset由0x90变为0xA4,增加0x14,即add ...
- ELF文件之七——使用链接脚本-2个函数-data-bss-temp-call
main.c int enable; ; int main() { int temp; add(); ; } int add() { ; } o反汇编的地址都是0起始,elf的地址都是映射后的地址. ...
- ELF文件之四——使用链接脚本-2个函数-data
main.c ; int main() { ; } int add() { ; } main.o 反汇编可以看到多了.text节的反汇编,存储的是全局变量的初始化数值 main.o对比,text段后面 ...
- axf、elf文件转换成bin、hex脚本工具
在嵌入式开发过程中常常遇到将axf或elf文件转换成bin的情况,大家都知道通过gnu toolchain中的objcopy和keil中的fromelf能做到.可是为了这么一个小事而记住复杂的选项以及 ...
随机推荐
- 双射 - hash去重
题目描述Two undirected simple graphs and where are isomorphic when there exists a bijection on V satisfy ...
- Java单体应用 - Markdown - 02.基础语法
原文地址:http://www.work100.net/training/monolithic-markdown-basic.html 更多教程:光束云 - 免费课程 基础语法 序号 文内章节 视频 ...
- QTP测试web时:打开ie浏览器进行录制但qtp录制脚本为空
1. 关闭ie的保护模式:设置——internet选项——安全——取消勾选“启用保护模式” 这一步很关键,之前试过很多步骤,只有这个成功了. 修改后如果可行即可.如果不行再进行下面操作: 2.关闭杀毒 ...
- Java中SMB的相关应用
目录 SMB 服务操作 Ⅰ SMB简介 Ⅱ SMB配置 2.1 Windows SMB Ⅲ 添加SMB依赖 Ⅳ 路径格式 Ⅴ 操作共享 Ⅵ 登录验证 SMB 服务操作 Ⅰ SMB简介 SMB(全称 ...
- 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times
#-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...
- 个人第4次作业:Alpha测试
这个作业属于哪个课程 课程 这个作业要求在哪里 作业要求 团队名称 CTRL-IKun 一.测试人员个人信息 姓名 王川 学号 201731021132 所在团队 CTRL-IKun 二.测试情况及结 ...
- Spring注解开发系列专栏
这个系列主要是讲Spring注解的使用,可以为后面SpringBoot的学习带来一定的帮助.我觉得从Spring直接过度到SpringBoot还是有点快,还是得需要一个演变的过程.从Spring开发, ...
- laravel 学习笔记 — 神奇的服务容器
2015-05-05 14:24 来自于分类 笔记 Laravel PHP开发 竟然有人认为我是抄 Laravel 学院的,心塞.世界观已崩塌. 容器,字面上理解就是装东西的东西.常见的变量.对象属 ...
- DataTable 相关
1.对表的初始化 //创建表 DataTable table = new DataTable(); //添加列 table.Columns.Add("ID", typeof(Int ...
- ROC 曲线
Receiver Operating Characteristic (接收机操作特性曲线) 是以虚警率为横轴,以击中率为纵轴,长成如下模样: 所谓击中率(hit)是指将正样本判断为正样本的比例,而虚警 ...