PWN入门程序装载与虚拟内存 小白笔记

文章详细阐述了源代码如何通过编译生成可执行文件,接着探讨了在内存中以节和段的形式映射,特别是ELF文件格式在Linux系统中的作用。它还解释了虚拟内存的概念,包括用户空间、内核空间、堆、栈以及动态链接库的加载情况。
摘要由CSDN通过智能技术生成

1.源代码到执行

源代码test.c从磁盘中,通过gcc编译成a.out(可执行文件)。

执行的时候,是将磁盘中的可执行文件(a.out)映像到内存中。

2.节视图和段视图

节视图(磁盘中的可执行文件)

不同的功能区域被划分为不同的节。不同的功能区域根据读写权限划分为一个一个段,然后在虚拟内存中发挥作用。

节视图是在磁盘中划分功能的,段试图是程序装载在内存中划分不同的读写执行权限的。

下图中左边是节视图右边是段视图。图片来自ELF文件格式_韩超_InfoQ写作社区

下图来自视频。

这里的右边的图片中内存地址的单位是bits

3.ELF文件到虚拟地址空间的映射

节根据读写权限不同被划分为不同的段,然后不同的段由系统完成映射。(对于Linux而言)

地址以字节编码1byte=8bits

常以16进制表示。方便阅读,转化迅速(2-16)。

4.虚拟内存

虚拟内存 用户空间每个进程一份。

虚拟内存 内核空间所有进程共享一份。

虚拟内存 mmap段中的动态链接库仅在物理内存装载一份。

CPU和硬件最终访问的都是物理内存,但是由于物理内存的一些机制,所以对于程序员不太友好。所以操作系统为作为中间的桥梁为我们抽象了出了一个虚拟内存这个抽象层。

5.虚拟内存结构

整个4GB是这样一个结构,最上边的kernel(内核空间)是共享的。

glibc也是只载入一份

各个层次

Reserved:保留区域

code,data段是从elf文件拿的

heap:堆空间,满足用户动态内存申请。

mmap:映射一段虚拟内存空间,映射文件或数据

stack:栈,控制程序执行流,协助程序完成程序流转移和恢复的功能。

undefined Region :空闲

Kernel Space:内核空间

6.操作系统:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y6y6y666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值