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) 保存步骤为:参数-->返回地址-->局部变量

最新文章

  1. git操作---更新删除
  2. codeMirror的简单使用,js比较文本差异(标注出增删改)
  3. java jdbc 连接mysql数据库 实现增删改查
  4. mysql截取longblob类型字段内一小块数据的方法
  5. ElasticSearch之二——集群
  6. Volley网络连接
  7. ArrayList集合的语句示例
  8. Symfony VarDumper Component
  9. UVA 12097 LA 3635 Pie(二分法)
  10. C# 集合性能比较(代码测试)
  11. hihoCoder #1234 : Fractal(数学简单题)
  12. 剑指offer——从尾到头打印链表节点的值
  13. (Android) ContentProvider 实例
  14. 第十四周实验报告:实验四 Android程序设计
  15. SharePoint WebService 之更新审批状态
  16. sed和awk用法
  17. Mathematica求微分换元
  18. SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
  19. Python-面向对象简介
  20. C++类间相互引用

热门文章

  1. springboot 多数据源 实例(sybase、mysql数据库)(上)
  2. SpringBoot项目启动后再请求远程接口的实现方式
  3. Nginx基础02:配置文件nginx.conf(Part1)
  4. 【GDKOI 2021提高组DAY2】抄写
  5. cmd数字雨原代码
  6. 这些 JavaScript 笔试题你能答对几道?
  7. 下载、编译AspNetCore 的全过程
  8. Flutter:StatefulWidget 怎么传参
  9. CCProxy网络代理小试牛刀
  10. Python ( 高级 第一部)