【Linux0.11代码分析】10 之 ELF可执行程序03 - Program Headers解析

news/2025/1/12 18:51:13/

【Linux0.11代码分析】10 之 ELF可执行程序03 - Program Headers解析

  • 一、ELF概述
  • 二、ELF的组成结构
    • 2.1 ELF header:解析出 section headers 含31个section节和 program headers 含13个segment段
    • 2.2 Section Headers:获取当前程序的31个section节区信息
    • 2.3 Program Headers:解析13个segment段 及 对应的虚拟地址和物理地址
    • 2.4 Program Headers:解析13个segment 段和31个section节的映射关系


系列文章如下:

系列文章汇总:《【Linux0.11代码分析】之 系列文章链接汇总(全)》
https://blog.csdn.net/Ciellee/article/details/130510069
.
1.《【Linux0.11代码分析】01 之 代码目录分析》
2.《【Linux0.11代码分析】02 之 bootsect.s 启动流程》
3.《【Linux0.11代码分析】03 之 setup.s 启动流程》
4.《【Linux0.11代码分析】04 之 head.s 启动流程》
5.《【Linux0.11代码分析】05 之 kernel 0号进程初始化 init\main.c 代码分析》
6.《【Linux0.11代码分析】06 之 kernel 1号进程 init() 代码分析》
7.《【Linux0.11代码分析】07 之 kernel execve() 函数 实现原理》
8.《【Linux0.11代码分析】08 之 ELF可执行程序01 - ELF header解析》
9.《【Linux0.11代码分析】09 之 ELF可执行程序02 - Section Headers解析》
10.《【Linux0.11代码分析】10 之 ELF可执行程序03 - Program Headers解析》



本文承接前文:《【Linux0.11代码分析】08 之 ELF可执行程序01 - ELF header解析》 和 《【Linux0.11代码分析】09 之 ELF可执行程序02 - Section Headers解析》


一、ELF概述

二、ELF的组成结构

2.1 ELF header:解析出 section headers 含31个section节和 program headers 含13个segment段

以上内容见:
《【Linux0.11代码分析】08 之 ELF可执行程序01 - ELF header解析》



2.2 Section Headers:获取当前程序的31个section节区信息

见:《【Linux0.11代码分析】09 之 ELF可执行程序02 - Section Headers解析》


2.3 Program Headers:解析13个segment段 及 对应的虚拟地址和物理地址

描述了各个 segment 段的虚拟地址 和 物理地址,及其对应的权限 RW

Program Headers:Type           Offset             VirtAddr           PhysAddrFileSiz            MemSiz              Flags  AlignPHDR           0x0000000000000040 0x0000000000000040 0x00000000000000400x00000000000002d8 0x00000000000002d8  R      0x8INTERP         0x0000000000000318 0x0000000000000318 0x00000000000003180x000000000000001c 0x000000000000001c  R      0x1[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]LOAD           0x0000000000000000 0x0000000000000000 0x00000000000000000x0000000000000628 0x0000000000000628  R      0x1000LOAD           0x0000000000001000 0x0000000000001000 0x00000000000010000x00000000000001e5 0x00000000000001e5  R E    0x1000LOAD           0x0000000000002000 0x0000000000002000 0x00000000000020000x000000000000012c 0x000000000000012c  R      0x1000LOAD           0x0000000000002db8 0x0000000000003db8 0x0000000000003db80x0000000000000258 0x0000000000000260  RW     0x1000DYNAMIC        0x0000000000002dc8 0x0000000000003dc8 0x0000000000003dc80x00000000000001f0 0x00000000000001f0  RW     0x8NOTE           0x0000000000000338 0x0000000000000338 0x00000000000003380x0000000000000030 0x0000000000000030  R      0x8NOTE           0x0000000000000368 0x0000000000000368 0x00000000000003680x0000000000000044 0x0000000000000044  R      0x4GNU_PROPERTY   0x0000000000000338 0x0000000000000338 0x00000000000003380x0000000000000030 0x0000000000000030  R      0x8GNU_EH_FRAME   0x0000000000002024 0x0000000000002024 0x00000000000020240x000000000000003c 0x000000000000003c  R      0x4GNU_STACK      0x0000000000000000 0x0000000000000000 0x00000000000000000x0000000000000000 0x0000000000000000  RW     0x10GNU_RELRO      0x0000000000002db8 0x0000000000003db8 0x0000000000003db80x0000000000000248 0x0000000000000248  R      0x1

2.4 Program Headers:解析13个segment 段和31个section节的映射关系

可以看出,.init_array .fini_array .dynamic .got .data .bss 这个section 节是保存在第6个 segment 段中

 Section to Segment mapping:Segment Sections...0001     .interp02     .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt03     .init .plt .plt.got .plt.sec .text .fini04     .rodata .eh_frame_hdr .eh_frame05     .init_array .fini_array .dynamic .got .data .bss06     .dynamic07     .note.gnu.property08     .note.gnu.build-id .note.ABI-tag09     .note.gnu.property10     .eh_frame_hdr1112     .init_array .fini_array .dynamic .got





http://www.ppmy.cn/news/87322.html

相关文章

python发送email

通过第三方SMTP发送纯文本邮件 #!/usr/bin/python -- coding: UTF-8 -- import smtplib from email.mime.text import MIMEText from email.header import Header 第三方 SMTP 服务 mail_host“smtp.XXX.com” #设置服务器 mail_user“XXXX” #用户名 mail_pass“XXXXXX” …

星辰天合XSKYC++笔试

一道填空题,十道简答题,三道编程题,并没记全哈 shell,如何将标准输出合错误输出同时重定向到同一位置? 可以使用下面的命令: command > file.txt 2>&1这个命令是用来将标准输出和标准错误输出合…

tomcat maxThread 压力测试 700 并发以内最好

以前一直简单的认为多线程高效率。其实多线程本身并不能提高 cpu 效率&#xff0c;线程过多反而会降低 cpu 效率。当 cpu 核心数<线程数时&#xff0c;cpu 就需要在多个线程直接来回切换&#xff0c;以保证每个线程都会获得 cpu 时间&#xff0c;即通常我们说的并发执行。所…

PCB~电磁干扰

电磁辐射 • 两个主要的电磁来源 • 电流穿过一个金属会产生一个磁场 • 在磁场中放置一个磁场会产生感应电流 • 导体的形状会影响流经它的电流所产生的磁场强度&#xff0c;反之变然 EMI&#xff1a;电磁干扰 • EMI:Electro-Magnetic Interference • EMI代表的是一个设…

Linux之文件目录类命令

文件目录类命令 pwd&#xff1a;显示当前工作目录的绝对路径 基本语法 pwd案例 [rootDemo-Server ~]# pwd /rootls&#xff1a;列出目录的内容 基本语法 ls [选项] [目录或是文件]选项说明 选项说明-a全部文件&#xff0c;连同隐藏文件&#xff08;开头为.的文件&#x…

pdf怎么合并在一起?软件操作更高效

PDF格式已经成为了许多文档和表格的首选格式。然而&#xff0c;当你需要合并多个PDF文件时&#xff0c;可能会遇到一些麻烦&#xff0c;在本篇文章中&#xff0c;我们将向您介绍一种简单易用的方法来合并PDF文件。 以下是可以用来合并PDF文件的软件&#xff1a; - PDF转换器&a…

(学习日记)AD学习 #2

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

JavaScript实现通过表格方式显示三角形的代码

以下为实现通过表格方式显示三角形的程序代码和运行截图 目录 前言 一、通过表格方式显示三角形 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要…