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文件之二——使用链接脚本的更多相关文章

  1. 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 ...

  2. Linux链接脚本学习--lds

    一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 每一个链接都被一个链接脚本所控制 ...

  3. Linux链接脚本学习--lds(转)

    Linux链接脚本学习--lds 一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 ...

  4. ELF文件加载与动态链接(二)

    GOT应该保存的是puts函数的绝对虚地址,这里为什么保存的却是puts@plt的第二条指令呢? 原来“解释器”将动态库载入内存后,并没有直接将函数地址更新到GOT表中,而是在函数第一次被调用时,才会 ...

  5. ELF文件之八——使用链接脚本-2个函数-data-bss-temp-call-debug信息

    gcc编译选项可以设置生成调试信息, debug信息格式有stabs,coff,xcoff,dwarf. 常用的有两种格式,stab和dwarf,stab较早,dwarf较新.两种格式介绍:https ...

  6. ELF文件之三——使用链接脚本-2个函数

    main.c int main() { ; } int add() { ; } main.o的比较 与之二相比,section header offset由0x90变为0xA4,增加0x14,即add ...

  7. ELF文件之七——使用链接脚本-2个函数-data-bss-temp-call

    main.c int enable; ; int main() { int temp; add(); ; } int add() { ; } o反汇编的地址都是0起始,elf的地址都是映射后的地址. ...

  8. ELF文件之四——使用链接脚本-2个函数-data

    main.c ; int main() { ; } int add() { ; } main.o 反汇编可以看到多了.text节的反汇编,存储的是全局变量的初始化数值 main.o对比,text段后面 ...

  9. axf、elf文件转换成bin、hex脚本工具

    在嵌入式开发过程中常常遇到将axf或elf文件转换成bin的情况,大家都知道通过gnu toolchain中的objcopy和keil中的fromelf能做到.可是为了这么一个小事而记住复杂的选项以及 ...

随机推荐

  1. python命名空间(namespace)

    命名空间: 每一个作用域变量存储的位置,或者解释为 存储作用域中变量的字典. 作用: 获取想查看某个作用域中的变量名.变量值. 使用方法: locals()  #当前命名空间 1. 效果图: 2. 代 ...

  2. 小程序中组件公用属性和data-的使用

    属性名                类型                   描述                              注解 hidden                Boo ...

  3. 修理牛棚 贪心 USACO

    今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 7[提交] ...

  4. 小白学Java:迭代器原来是这么回事

    目录 小白学Java:迭代器原来是这么回事 迭代器概述 迭代器设计模式 Iterator定义的方法 迭代器:统一方式 Iterator的总结 小白学Java:迭代器原来是这么回事 前文传送门:Enum ...

  5. 区间dp - 不连续的回文串

    Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they plann ...

  6. 4.JavaSE之标识符

    标识符:Java所有的组成部分都需要名字.类名.变量名以及方法名都被称为标识符. 关键字:abstract.assert.boolean.breake.public.static.class...

  7. AVL练习题——宠物收养所

    题目描述 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出 ...

  8. jQuery-01-jQuery选择器及元素操作

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. POI导入导出excel(附工具类)

    关于POI导出excel的功能我在前面的文章已经写过了,POI导出excel的三种方式 , 导出表格数据到excel并下载(HSSFWorkbook版) ,本篇文章主要是将导入导出功能进一步地封装,在 ...

  10. java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"

    问题描述 今天在使用SpringBoot整合spring security,使用内存用户验证,但无响应报错:java.lang.IllegalArgumentException: There is n ...