PWN
Posted ying-hack
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PWN相关的知识,希望对你有一定的参考价值。
二进制基础
- 程序的编译与链接
- Linux下的可执行文件格式ELF
- 进程虚拟地址空间
- 程序的装载与进程的执行
- x86amd64汇编简述
程序的编译与链接
从C源代码到可执行文件的生成过程
C语言代码 -> 汇编代码 -> 机器码 -> 可执行文件
- 编译
- 由C语言代码生成汇编代码
gcc -S 文件名
- 汇编
- 由汇编代码生成机器码
gcc 文件名
- 链接
- 将多个机器码的目标文件链接成一个可执行文件
gcc 文件名
在Linux下一步从C编译到机器码gcc 文件名
反汇编从汇编到C语言是可以做到的,但是从汇编代码到高级语言是不现实的。汇编代码和机器代码是一一对应的关系。
目前反汇编的话IDA做的是比较好的。
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
- 可执行文件
附上大佬的图
- ELF文件
- ELF文件头表
-记录了ELF文件的组成结构 - 程序头表/段表
- 告诉系统如何创建进程
- 生成程序的可执行文件必须拥有此结构
- 重定位文件不一定需要
- 节头表
- 记录了ELF的节的节区信息
- 用于链接的目标文件必须拥有此结构
- 其他类型目标文件不一定需要
- ELF文件头表
在磁盘中的文件断电之后会被存储,但是在内存中的文件断电之后就会消失
一个ELF文件不足以支撑程序的执行,还需要其他的一些东西来执行文件。
进程虚拟地址空间
每个进程都有4g的虚拟空间
但是实际上的空间要比4g小的多
在执行的时候虚拟地址会转化为实际地址
地址以字节编码
1 Byte = 8bits
常以16进制表示
0x3c = 0011 1100
虚拟内存用户空间每个进程一份
虚拟内存内核空间所有进程共享一份
虚拟内存mmap段中的动态链接库仅在物理内存中装载一份
以上是关于PWN的主要内容,如果未能解决你的问题,请参考以下文章
[NTUSTISC pwn LAB 6]rop&Return to plt实验