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. Elasticsearch系列---实战零停机重建索引

    前言 我们使用Elasticsearch索引文档时,最理想的情况是文档JSON结构是确定的,数据源源不断地灌进来即可,但实际情况中,没人能够阻拦需求的变更,在项目的某个版本,可能会对原有的文档结构造成 ...

  2. Core 定时任务之HangFire

    ASP.NET Core 使用 Hangfire 很简单,首先,Nuget 安装程序包 > install-package Hangfire -pre 然后ConfigureServices添加 ...

  3. python爬虫——scrapy的使用

    本文中的知识点: 安装scrapy scrapy的基础教程 scrapy使用代理 安装scrapy 由于小哥的系统是win7,所以以下的演示是基于windows系统.linux系统的话,其实命令都一样 ...

  4. 使用远程接口库进一步扩展Robot Framework的测试能力

    引言: Robot Framework的四层结构已经极大的提高了它的扩展性.我们可以使用它丰富的扩展库来完成大部分测试工作.可是碰到下面两种情况,仅靠四层结构就不好使了: 1.有些复杂的测试可能跨越多 ...

  5. Java故障定位方法总结

    多线程并发,程序执行速度较快,使用简单断点不能够定位到出错的线程: 通过打印日志,不断精确定位故障的位置和导致故障的原因. 在断点处设置condition为Thread.currentThread() ...

  6. [bzoj4571] [loj#2016] [Scoi2016] 美味

    Description 一家餐厅有 \(n\) 道菜,编号 \(1\)...\(n\) ,大家对第 \(i\) 道菜的评价值为 \(ai\)( \(1 \leq i \leq n\) ).有 \(m\ ...

  7. [bzoj2120] [洛谷P1903] 数颜色

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  8. 【java面试】框架篇之Spring

    1.你如何理解Spring? 具体来说Spring是一个轻量级的容器,用于管理业务相关对象的.核心功能主要为:IOC,AOP,MVC. IOD:控制反转,将对象的创建过程交给容器,让容器管理对象的生命 ...

  9. 深入NodeJS模块os - 与操作系统“打交道”

    读了 os 模块的文档,研究了几个有意思的问题:

  10. mva 的 第一弹 ASP.NET SignalR

    弹弹弹 弹走 占位 补齐