首页 > 其他分享 >PWN基础

PWN基础

时间:2023-01-27 22:55:48浏览次数:44  
标签:可执行文件 文件 基础 ELF 内存 PWN segment 链接

PWN基础

程序的编译与链接

编译:由C语言代码生成汇编代码

汇编:由汇编代码生成机器码

链接:将多个机器码的目标文件链接成一个可执行文件

d36915ed515022fc9499814b884abdd.png

2423aa3a8e33bf48f074a2834d099a0.png

Linux下的可执行文件格式ELF

什么是可执行文件?

广义:文件中的数据是可执行代码的文件.out、.exe、.sh、.py

狭义:文件中的数据是机器码的文件.out、.exe、.dll、.so

可执行文件的分类

Windows:PE(Portable Executable)可执行程序

.exe

动态链接库.dll

静态链接库.lib

Linux:ELF(Executable and Linkable Format)可执行程序

.out

动态链接库.so

静态链接库.a

8570d3e02c5151be47323778807877d.png

ELF文件头表(ELF header)
记录了LF文件的组织结构

程序头表/段表(Program header table)
告诉系统如何创建进程
生成进程的可执行文件必须拥有此结构
重定位文件不一定需要
节头表(Section header table)
记录了ELF文件的节区信息
用于链接的目标文件必须拥有此结构
其它类型目标文件不一定需要

磁盘中的ELF(可执行文件)与内存中的ELF(进程内存映像)

c5ebe067c32c4782f1e7687d7c3b8e2.png

618ccde85e287cb2ebb92bb09257225.png

进程虚拟地址空间

130c7ddb4d7766284df93099323a599.png

180b1aac76d2d2a5c50e4428eeaa486.png

1674828554978.png

段(segment)与节(section)

·代码段(Text segment)包含了代码与只读数据
.text节
.rodata节
.hash节
·.dynsym节
.dynstr节
pt节
.rel.got节
数据段(Data segment)包含了可读可写数据
·.data节
·.dynamic节
.got节
.got.plt节
.bss节
,栈段(Stack segment)

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

程序数据是如何在内存中组织的

1674828781928.png

程序的编译与链接

大端序与小端序

1674828930136.png

程序的装载与进程的执行

1674830827471.png

部分寄存器的功能

RIP:存放当前执行的指令的地址

RSP:存放当前栈帧的栈顶地址

RBP:存放当前栈帧的栈底地址

RAX:通用寄存器。存放函数返回值

链接的程序的执行过程

1674829153404.png

1674829222361.png

x86&amd64汇编简述

1674829277604.png

1674829293932.png

1674830397571.png

标签:可执行文件,文件,基础,ELF,内存,PWN,segment,链接
From: https://www.cnblogs.com/rayob1/p/17069483.html

相关文章

  • CCNA复习训练: RIP基础实验
    RIP实验记录:复习之前网络基本知识,搭建基础模拟实验环境,熟练命令和掌握RIP路由更新原理和故障排除方法熟悉路由器基本配置掌握RIPv1/v2配置方法debug跟踪调试......
  • linux基础3
    目录linux基础3今日内容概要今日内容详细网络不通顺排查流程etc目录下重要的数据文件usr目录下重要的数据文件var目录下重要的数据文件proc目录重要的数据文件系统优化相关......
  • JavaScript基础知识
    1.编程语言  1.1编程      1.2计算机语言    1.3编程语言    1.4翻译器      1.5编程语言和标记语言的区别   ......
  • DQL--基础查询
    查询多个字段:select字段列表 from表名;注意:如果查询全部字段列表,字段列表用*代替,即select*from表名;去除重复记录:selectdistinct字段列表from表名;起别名:AS--......
  • 【参考答案】java基础练习:方法、递归
    方法实现定义方法(不用jdk提供的方法),计算x的y次方,如2的5次方packagecom.qzcsbj;/***@公众号:全栈测试笔记*@描述:<>*/publicclassTest{publicstaticvoid......
  • java基础笔记
    JAVA基础数据类型基本数据类型(PrimitiveType)数值类型:整数类型:​ byte占1字节​ short占2字节​ int占4字节​ long占8字节,long类型数据后要加L(小写l也行,......
  • linux基础2
    目录linux基础2昨日问题说明今日内容概要今日内容详细前期必备知识系统运行命令快捷命令方式目录结构相关命令文件与文件夹相关命令文件编辑命令编辑相关快捷方式vim简介异......
  • MongoDB 基础(二)mongodb 与 T-SQL 对比
    SQLTerms/ConceptsMongoDBTerms/ConceptsdatabasedatabasetableCollection(集合)rowdocument(文档)columnKey(键)ValueValue(值)indexindextablejoinsembeddeddocumentsandlin......
  • MongoDB 基础(三)mongodb 中的索引使用
    MongoDB中的索引和其他数据库索引类似,也是使用B-Tree结构。MongoDB的索引是在collection级别上的,并且支持在任何列或者集合内的文档的子列中创建索引。 下面是官方给出的一......
  • 【Python基础学习】6.组合数据类型
    主要参考来源:慕课嵩天老师的“Python语言程序设计”[https://www.icourse163.org/course/BIT-268001?tid=1468130447]6.1集合类型及操作集合类型定义集合是多个元素的无......