首页 > 编程语言 >菜鸟笔记之PWN入门(1.1.0)ELF 文件格式和程序段解析(简版)

菜鸟笔记之PWN入门(1.1.0)ELF 文件格式和程序段解析(简版)

时间:2024-09-18 16:26:29浏览次数:11  
标签:可执行文件 文件 data ELF bss 文件格式 str 菜鸟 程序段

ELF (Executable and Linkable Format): 是一种用于 可执行文件目标文件 的文件格式,类似于 Windows 下的 PE 文件格式。

ELF 主要包括三种类型的文件:

  • 可重定位文件 (relocatable): 编译器和汇编器产生的 .o 文件,由 Linker 处理。
  • 可执行文件 (executable)Linker 对 .o 文件进行处理后输出的文件,代表进程映像。
  • 共享对象文件 (shared object): 动态库文件,通常是 .so 文件。

ELF 文件包含多个段,每个段承担不同的作用。以下是一些入门级 PWN 可能需要用到的段(仅介绍这些基本段):

  1. .text: 用于保存程序中的代码片段。
  2. .data: 用于保存已经初始化的全局变量和局部变量。
  3. .bss: 用于保存未初始化的全局变量和局部变量。
  4. .plt: 用于链接和跳转到对应的 .got 表。
  5. .got.plt: 存储对应函数的真实地址的表。
  6. .rodata: 只读数据
  7. .init: 程序初始化和终止的代码

ELF 文件中的段在程序执行前会被加载到内存中,然后在计算机内存中
一个程序可以认为由bss段data段text段三个部分组成的。
text段data段都存在可执行文件当中,程序执行时,系统从可执行文件中加载至内存
bss段在可执行文件中只是一个符号用于占位,由系统根据其符号进行初始化

如何加载:

.text 段

  • 代码段 (code segment): 用来存放 程序执行的代码
  • 这个段的大小在程序执行之前就已经确定,因为编译好的程序代码量一般是固定的。
  • 该段通常有读和执行权限,但一般禁止修改(当然,也有部分特殊架构允许修改代码段)。
  • 在代码段中,可能也包含一些常数变量,例如字符串。

.data 段

  • 数据段 (data segment): 用来存放已经 初始化的全局变量
  • 数据段属于静态内存分配,即被程序分配后大小不再改变。

例子:

#include <stdio.h>
int str[30] = "i_am_xidp_and_i_love_pwn";
int main() {
    printf("%s", str);
    return 0;
}

在上述例子中,已经被赋值好的数据 str 会被放在 .data 段中。由于其大小是固定的,因此 .data 段中的数据也是固定大小的。

.bss 段

  • bss 段 (bss segment): 用于存放程序中未初始化的全局变量。
  • 和 .data 段一样,属于静态内存分配。

例子:

#include <stdio.h>
int str[30];
int main() {
    scanf("%s", str);
    printf("%s", str);
    return 0;
}

.bss 段本身不会占用 ELF 文件的实际大小,它在 ELF 等可执行文件中只是一个符号用于占位。程序执行时,会根据这个符号在计算机中分配相应的内存大小。

数据区: .data 段和 .bss 段通常被称为数据区。

参考文献:
Linux可执行文件格式-ELF结构详解 - 我叫平沢唯 - 博客园 (cnblogs.com)
PWN入门(1-1-2)-bss段、data段、text段、堆(heap)和栈(stack) (yuque.com)

标签:可执行文件,文件,data,ELF,bss,文件格式,str,菜鸟,程序段
From: https://www.cnblogs.com/XiDP0/p/18417553

相关文章

  • 菜鸟笔记之PWN入门(1.0.0)前言
    什么是PWN?PWN是黑客术语中的俚语,是指攻破设备或者系统。它的发音类似于“砰”,当然也有师傅把它叫作“胖”。PWN的目标是获取系统的控制权或执行未经授权的操作。如何入门PWN前置知识C语言学习内容:程序结构和基础语法数据类型、分支语句(如 if、switch)和循环(如 fo......
  • VScode快速配置c++(菜鸟版)
    1.vscode是什么VisualStdioCode简称VSCode,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱即用的支持。同时,它还支持插件扩展,通过丰......
  • 基于nodejs+vue的校园菜鸟驿站管理系统的设计与实现(源码+LW+调试文档+讲解等)
     目录:博主介绍:  完整视频演示:系统技术介绍:后端Java介绍前端框架Vue介绍具体功能截图:部分代码参考:  Mysql表设计参考:项目测试:项目论文:​为什么选择我:源码获取:博主介绍:  ......
  • GGUF大模型文件格式
    GGUF大模型文件格式https://www.datalearner.com/blog/1051705718835586 大语言模型的开发通常使用PyTorch等框架,其预训练结果通常也会保存为相应的二进制格式,如pt后缀的文件通常就是PyTorch框架保存的二进制预训练结果。但是,大模型的存储一个很重要的问题是它的模型文件巨......
  • IMA的binary_runtime_measurement文件格式
    首先贴出一个IMA度量文件的实例:binary_runtime_measurement:00000000000a00009d4c81b9dbf2b4c527177f49|.....L......'..I|00000010759de98fdc50a2f6000600006d692d61|u....P......mi-a|00000020676e00310000001a0000687......
  • PbootCMS增加可允许上传文件类型,例如webp、mov等文件格式扩展
    要在PbootCMS中增加允许上传的文件类型,比如 webp 或 mov 格式,您需要编辑系统的配置文件来添加这些文件扩展名。以下是具体的操作步骤:打开PbootCMS的配置文件 config.php,通常这个文件位于项目的 /config/ 目录下。在 config.php 文件中,找到上传配置的部分,这通常......
  • Python毕业设计基于Django的 校园菜鸟驿站管理系统
    文末获取资源,收藏关注不迷路文章目录一、项目介绍二、主要使用技术三、研究内容四、核心代码五、文章目录一、项目介绍首先,以需求为依据,根据需求分析结果进行了系统的设计,并将其划分为管理员和用户二种角色和多个主要模块:用户、快递类型、快递信息、取件信息等。......
  • java多线程转换文件格式
    privatestaticfinalintTHREAD_COUNT=4;//线程数privatestaticfinalintBUFFER_SIZE=1024;//缓冲区大小/***多线程读取文件,转换文件编码格式4线程1Mb缓存**@paraminputFile输入文件Stringinput="E:/02code/web/test.txt"......
  • JPEG格式研究——(2)JPEG文件格式
    JPEG文件除了图像数据之外,还保存了与图片相关的各种信息,这些信息通过不同类型的TAG存储在文件中。TAGJPEG通过TAG标记压缩书记之外的信息。所有的TAG都包含一个TAG类型,TAG类型大小为两个字节,位于一个TAG的最前面。TAG类型的第一个字节一定为0xFF以下是部分常见的TAG类型TAG......
  • 计算机领域的那些文件格式
    压缩文件格式1.001开发人:不特定公司:不适用主要用途:用于将大文件分卷成多个小文件,通常与`.002`,`.003`等文件一起使用。常见于老旧的分卷工具,如HJ-Split。2.bz2开发人:JulianSeward公司:不适用主要用途:用于压缩单个文件,通常用于UNIX和Linux......