首页 > 其他分享 >pwn里面的一些小知识

pwn里面的一些小知识

时间:2023-04-14 23:34:56浏览次数:35  
标签:里面 操作系统 知识 Bytes 地址 存放 内存 pwn segment

进程虚拟地址空间

​ 操作系统管理所有硬件,程序在运行时也是由操作系统通过虚拟地址空间的映射去管理。这样就避免了直接使用物理地址,避免他人能够直接通过物理地址对主机进行恶意程序调用。如果想调用物理硬件就需要用到编程接口(系统调用)。

​ 在操作系统中,对每一个进程应用都是分配的4GB的虚拟内存。在32位4GB的内存中,操作系统会用1GB来存储操作系统的代码,剩余3GB给用户,操作系统的1GB是给所有进程共享的。虚拟内存mmap段中的动态链接库仅在物理内存中装载一份。(windows:2GB给用户,2GB给内核)

段(segment)与节(section)

​ 段视图用于进程的内存区域的rwx权限划分,节视图用于ELF文件编译链接时与在磁盘上存储时的文件结构的组织。一个段包含了多个节。

  • 代码段(Text segment)包含了代码与只读数据
    • .text节
    • .rodata节(read only data)
    • .hash节
    • .dynsym节
    • .dynstr节
    • .plt节(解析动态函数的实际地址)
    • .rel.got节
    • .......
  • 数据段(Data segment)包含了可读可写数据
    • .data节(声明了的全局变量)
    • .dynamic节
    • .got节
    • .got.plt节
    • .bss节(还未声明的全局变量)
    • ......
  • 栈段(Stack segment)

大端序和小端序

  • 小端序:低位存放低地址、高位存放高地址
  • 大端序:低位存放高地址、高位存放低地址

程序的装载与进程的执行

​ amd64寄存器结构

  • rax:8 Bytes
  • eax:4 Bytes
  • ax: 2 Bytes
  • ah: 1 Bytes
  • al: 1 Bytes

​ 部分寄存器的功能

  • RIP:存放当前执行的指令的地址
  • RSP:存放当前栈帧的栈顶地址
  • RBP:存放当前栈帧的栈底地址
  • RAX:通用寄存器。存放函数返回值

​静态链接的程序的执行过程

image-20220912205341428.png

  • 运行一个binary程序,然后通过调用fork这个函数去复制一份虚拟内存,逐层的通过用户级函数申请调用,到内核级函数开始运行,准备好内存之后,开始准备环境。最后执行代码。

​ 动态链接的程序的执行过程 image-20220912210039008.png

  • 它在准备好内存之后,需要通过链接器(ld.so)先其他动态链接库获取代码。

标签:里面,操作系统,知识,Bytes,地址,存放,内存,pwn,segment
From: https://blog.51cto.com/u_15954070/6191144

相关文章

  • 会计知识点
    会计知识点1利润表1.1利润表​当期损益指损益类科目的当期的发生额,即净利润。2资产类2.1现金方式取得金融资产的核算科目:交易性金融资产核算-其他货币资金长期债券投资-银行存款债权投​资-银行存款​长期股权投资-银行存款2.2无形资产摊销额按照受益对象计入相......
  • 前端小知识点扫盲笔记记录8
    前言我是歌谣放弃很容易但是坚持一定很酷今天继续对前端知识的小结命令模式宏命令<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="......
  • 推荐系统-知识综述
    目录倒排精排粗排模型训练百度基于GPU的超大规模离散模型训练框架PaddleBox与FeaBox倒排精排粗排模型训练百度基于GPU的超大规模离散模型训练框架PaddleBox与FeaBoxhttps://zhuanlan.zhihu.com/p/613322265PaddleBox聚焦训练性能、稳定性、成本存储挑战:实现了分......
  • 算法刷题-阶乘后的零(数学)、模拟计算器(算法初阶、基础知识)、解码方法(字符串、动态
    阶乘后的零(数学)给定一个整数n,返回n!结果中尾随零的数量。提示n!=n*(n-1)*(n-2)*...*3*2*1示例1:输入:n=3输出:0解释:3!=6,不含尾随0示例2:输入:n=5输出:1解释:5!=120,有一个尾随0示例3:输入:n=0输出:0提示:0<=n<=104**进阶:**你......
  • 由 Base64 展开的知识探讨
    前言在我们的业务应用中越来越多的应用到编码内容,例如在API中,给到后端的SQL都是通过Base64加密的数据等等。能够发现我们的代码中,使用的window对象上的btoa方法实现的Base64编码,那btoa具体是如何实现的呢?将在下面的内容中为大家讲解。那我们就先从一些基础知识开......
  • Java基础知识点内部类之成员内部类
    一:概述1.成员内部类顾名思义就是写在成员位置的,属于外部类成员。2.成员变量可以被一些修饰符所修饰,比如:private,default,public,static等。3.在成员内部类中,jdk16之前不能定义静态变量,jdk16开始才可以定义静态变量。二;获取内部类对象方法一;当成员内部类被private修饰时,在外部类中......
  • 7.1存储系统的基本知识
    7.1.1存储系统的层次结构满足对三个指标的要求:容量大速度快价格低采用多级存储技术,构成多级存储结构层次多级存储技术是一种计算机存储系统的组织方式,将计算机存储系统划分为多个层次,每个层次的存储介质速度和容量不同,以便在不同的应用场景下提供最优的性能和存储空间。......
  • 一、图论基础知识(2023.4.13初版[个人向])
    1.图的定义和概念1.图的定义图(Graph)是由顶点的有穷非空集合V和顶点之间的边的集合E组成,通常表示为G={V,E},其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合1.图中点的数据元素称之为顶点线性表中的数据元素称为元素数中的数据元素称为结点2.线性表和树均可以没有元素,......
  • Linux操作系统汇编语言基础知识(图文代码)
    1、什么是汇编语言,它在计算机语言中的地位?汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言2、汇编语言与源程序、汇编程序、汇编的关系?3、汇编语言的特点\1)汇编语言与机器指令一一对应,可充分理解计算机的操作过程汇编语言指令是机器指令的符号表......
  • Linux操作系统汇编指令入门级整理知识点
    前言我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他无法正确调用想执行的函数,结......