vmlinux.lds解读

2024-04-23 02:58
文章标签 解读 lds vmlinux

本文主要是介绍vmlinux.lds解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

vmlinux.lds.S用于对ld的输出进行组版,这个文件的格式在ld.info手册中有详细的说明。vmlinu
x.lds.S的主要目的是对输出文件中段进行排序,并定义相关的符号名,以下是简要注释。

/* ld script to make i386 Linux kernel
 * Written by Martin Mares ;
 */
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)        /* 输出格式 */
ENTRY(_start)            /* 定义_start作为入口点 */
SECTIONS
{
  . = PAGE_OFFSET_RAW + 0x100000; /* 定义当前段的偏移量(.代表当前计数器) */
  _text = .;            /* 定义符号_text为当前位置  */
  .text : {        /* 定义段.text (": {"是段定义符)*/
    *(.text)    /* 将所有输入文件中.text段合并到这里 */
    *(.fixup)    /* 将所有输入文件中的.fixup段合并到这里 */
    *(.gnu.warning) /* 将所有输入文件中的.gnu.warning段合并到这里 */
    } = 0x9090    /* 合并中的空隙用0x9090填充 */
            /* 以下的语法含义可以类推 */
  .text.lock : { *(.text.lock) }    /* out-of-line lock text */
  .rodata : { *(.rodata) }
  .kstrtab : { *(.kstrtab) }

  . = ALIGN(16);        /* Exception table */
  __start___ex_table = .;    /* 定义__start_ex_table符号为当前位置 */
  __ex_table : { *(__ex_table) }
  __stop___ex_table = .;

  __start___ksymtab = .;    /* Kernel symbol table */
  __ksymtab : { *(__ksymtab) }
  __stop___ksymtab = .;

  _etext = .;            /* End of text section */

  .data : {            /* Data */
    *(.data)
    CONSTRUCTORS        /* 将C++的构造函数指针段合并到这里 */
    }

  _edata = .;            /* End of data section */

  . = ALIGN(8192);        /* init_task */
  .data.init_task : { *(.data.init_task) }

  . = ALIGN(4096);        /* Init code and data */
  __init_begin = .;
  .text.init : { *(.text.init) }
  .data.init : { *(.data.init) }
  . = ALIGN(4096);        /* 输出计数器在页边界上对齐 */
  __init_end = .;

  . = ALIGN(32);
  .data.cacheline_aligned : { *(.data.cacheline_aligned) }

  . = ALIGN(4096);
  .data.page_aligned : { *(.data.idt) }


  __bss_start = .;        /* BSS */
  .bss : {
    *(.bss)
    }
  _end = . ;

  /* Stabs debugging sections.  */
  .stab 0 : { *(.stab) }    /* 0 是段属性,代表段的起始地址 */
  .stabstr 0 : { *(.stabstr) }
  .stab.excl 0 : { *(.stab.excl) }
  .stab.exclstr 0 : { *(.stab.exclstr) }
  .stab.index 0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment 0 : { *(.comment) }
}

以下是用"objdump --headers vmlinux"得到的组版结果:

vmlinux:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0009ccb8  c0100000  c0100000  00001000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .text.lock    00000622  c019ccc0  c019ccc0  0009dcc0  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .rodata       0000f4ab  c019d2e4  c019d2e4  0009e2e4  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .kstrtab      00002d9c  c01ac78f  c01ac78f  000ad78f  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 __ex_table    00000ba8  c01af530  c01af530  000b0530  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 __ksymtab     00001870  c01b00d8  c01b00d8  000b10d8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .data         000133c0  c01b1950  c01b1950  000b2950  2**4
                  CONTENTS, ALLOC, LOAD, DATA
  7 .data.init_task 00002000  c01c6000  c01c6000  000c6000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  8 .text.init    0000868e  c01c8000  c01c8000  000c8000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  9 .data.init    00003220  c01d0690  c01d0690  000d0690  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 10 .data.cacheline_aligned 00001c20  c01d4000  c01d4000  000d4000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 11 .data.page_aligned 00000800  c01d6000  c01d6000  000d6000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 12 .bss          0001f324  c01d6800  c01d6800  000d6800  2**4
                  ALLOC
 13 .comment      000011d0  00000000  00000000  000d6800  2**0
                  CONTENTS, READONLY
 14 .note         000011d0  000011d0  000011d0  000d79d0  2**0
                  CONTENTS, READONLY

这篇关于vmlinux.lds解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927597

相关文章

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具体分析3. 进一步分析 Results1. 概括2. 具体分析2.1 语言模型

Open-Sora代码详细解读(1):解读DiT结构

Diffusion Models专栏文章汇总:入门与实战 前言:目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。 目录 DiT相比于Unet的关键改进点 Token化方