mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1317 字
3 分钟
c07
2025-11-13
c

PE 格式#

一种规范和标准,里面包含了程序执行的代码,数据和资源等 Win:.exe/.dll/.sys => pe

如图为pe文件的结构

c07_1

DOS部首#

pe 文件的开始部分 e_magic:“MZ” 0x5a4d

DOS stub -> “This program Cannot be run in DOS mode”

这是dos 部首的结构 c07_1

pe 文件头#

“PE”0,0

导入表 -> 引用的外部函数

导出表-> 自身定义的表

VOFFSET#

相对于基地址 IMAGE_BASE 的偏移(内存中)

ROFFSET#

在磁盘中 相对于文件头的地址

程序 EXE 与进程 线程

程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。把程序存放在磁盘上的EXE 程序文件是映像文件(ImageFile)

进程是程序在处理机的一次执行过程,他是一个动态的概念,拥有一个完整的生命周期。进程的实质是程曦在系统中的一次执行过程,进程是动态产生的,动态消亡的。一个程序在不同的数据集里就构成不同的进程

进程的三个状态:

  1. 就绪状态(Ready):进程已经获得除处理器外的所需资源,等待奉陪处理器资源。就绪进程可以按斗个优先级来划分队列。例如当进程由I/O 操作完成而进入就绪状态时,排入低优先级队。
  2. 运行状态(Running):进程占用处理器资源,在没有其他进程可以执行时(如果所有进程都在阻塞状态),通常会自动执行系统的空闲进程
  3. 阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足前无法继续执行。该时间发生前即使把处理器资源分配给进程,也无法运行

线程的引入,是为了提高系统并发的度。一个程序至少有一个进程,而一个进程至少有一个线程,进程是资源分配的基本单位,线程是调度的基本单位。

系统内存布#

  1. 用户空间(应用,C Library)
  2. Kernel Space(内核空间),操作系统
  3. 硬件平台

ELF 文件格式#

ELF(Executable and Linkable Format,可执行与可链接格式)是一种用于二进制文件(如可执行程序、目标代码、共享库和核心转储)的标准文件格式。它最初由 UNIX 系统实验室开发,现在已成为类 Unix 系统(如 Linux、BSD)以及许多嵌入式系统上最主流的文件格式。

ELF 的核心思想是 提供一种灵活的方式来描述文件的内容和组织结构,使其既能被链接器(用于创建程序)理解,也能被加载器(用于运行程序)理解 。为了实现这一点,ELF 文件使用了一个“节”和“段”的两级视图。

ELF文件结构#

  1. ELF 文件头

    • 位于文件开头,是整个文件的路线图
    • 包含信息:
      • 魔数:标识这是一个 ELF 文件(0x7F ‘E’ ‘L’ ‘F’)。
      • 文件类型,(可执行文件,共享库,目标文件)
      • 目标机器架构 x86-64 ARM
      • 程序头标在文件中的起始位置和表项大小
      • 节头表中字符串表的索引
  2. 程序头标

    • 仅在可执行文件和共享库中存在,目标文件(.o)通常没有。
    • 它定义了如何将文件内容映射到进程的内存空间。
    • 常见的段类型:
      • PT_LOAD:需要被加载到内存的段。一个可执行文件通常至少有两个 LOAD 段:一个用于代码和只读数据(权限为 R+X),另一个用于可读写数据(权限为 R+W)。
      • PT_INTERP:指定程序解释器(动态链接器)的路径,例如 /lib64/ld-linux-x86-64.so.2
      • PT_DYNAMIC:包含动态链接信息。
    • 文件的实际内容被组织在不同的节中。
    • 常见的节:
      • .text:存放已编译程序的 机器代码
      • .data:存放 已初始化的全局变量和静态变量
      • .bss:存放 未初始化的全局变量和静态变量 。这个节在文件中不占空间,但加载到内存时会分配空间并初始化为0
      • .rodata:存放 只读数据 ,如字符串常量。
      • .symtab符号表 ,存放函数和变量名等信息。
      • .strtab字符串表 ,存放 .symtab 等节中使用的字符串。
      • .shstrtab节头字符串表 ,存放所有节的名称。
      • .dynamic:动态链接信息。
      • .dynsym:动态链接符号表。
  3. 节头表

    • 描述了文件中所有节的信息。每个表项对应一个节,描述了该节的名称、类型、在文件中的偏移量、大小、内存地址、访问权限等。
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

c07
https://yoyolp.github.io/posts/c_asm/c07/
作者
超级玉米人
发布于
2025-11-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录