pwn的攻击基础原理
我的理解是主要通过分析主文件,然后获得有用信息,通过exploit对服务器输入指定的payload数据,获取服务器的shell,就是进入服务器的终端,获取服务器的控制权,对服务器进行操作,从而获取flag。
二进制基础
程序的编译和链接:以c语言为例,主要是我只会c语言,编译主要是通过将c语言代码生成汇编代码,但是计算机并不会处理这些代码,因为电脑并不认识这些代码,这时候我们就需要再将汇编代码链接生成计算机看得懂的代码,就是机器码(反正就是写乱码看得难受),这个机器码人是很难看懂的,但是机器能处理。
可执行文件
可执行文件就是在电脑上可以运行的文件,但在广义和狭义上又有一点不同。
广义上来说只要能在电脑上运行的就叫可执行文件,细点说就是可执行代码的文件。
狭义上说就是文件中的数据是机器码的文件。
这个需要区分开。
栈
栈(stack) 存放 参数,局部变量 等等
栈的使用:在调用函数的时候使用
我的理解是浅意上来看一个数组
深点看其实是一个存放指令的空间。
IP 地址:存放数据的地方(粉笔和粉笔盒)
寄存器 EAX,EBX:通用寄存器 ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一 个栈帧的栈顶。
EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面 一个栈帧的底部。
EIP:指令寄存器,存放的是本条执行指令的地址 指令 push:把数据压入栈中 pop:把数据弹出栈 jmp:无条件跳转 call:实际上是push 下一条执行指令的地址和jmp call后面的参数的合体 ret:和call连体,ret是pop 下一条执行指令的地址
原理:函数被调用后会产生一个栈来保存参数,局部变量和返回地址(EIP+4) 保存步骤为:参数-->返回地址-->局部变量
标签:代码,第一课,地址,初学,存放,指令,pwn,服务器,指针 From: https://www.cnblogs.com/ckylinhua/p/16861633.html