PWN基础

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

posted @ 2023-01-27 22:43  Ray言午  阅读(108)  评论(0编辑  收藏  举报