1.pwn的汇编基础(提及第一个溢出:整数溢出)

汇编掌握程度

能看懂就行,绝大多数情况不需要真正的编程(shellcode题除外)

其实有时候也不需要读汇编,ida F5

通常都是分析gadget,知道怎么用,

调试程序也不需要分析每一条汇编指令,单步执行然后查看寄存器状态即可

但是必须得会,学pwn必须会汇编

前置准备

一些量词

计算机寻址方式

在当前主流的操作系统中,都是以字节(B)为寻址单位进行寻址,

意味着计算机访问的最小单位是一个字节(B)

类比于人口普查,普查员以每户(B)为单位统计,而不是访问到个人(b)

计算机并不能直接运行高级语言

我们编写的高级语言程序需要进行编译后才能在计算机上运行。高级语言经过编译之后,经过编译器处理,被打包成一个可执行文件的格式,

那么,计算机真正能够被运行的是机器码01

机器码

深入底层后,计算机其实很笨,只能完成一些很基本的操作,但是速度很快机器码就是一个个01组成的,为了方便人类阅读,一般都以16进制呈现。

尽管如此,一个个16进制字符可读性仍然很差

汇编语言就是把这些机器指令代码以一个助记符的形式翻译一下,方便人类阅读。

汇编语言就是机器码的一个助记符

寄存器

计算机的指令都是由CPU来执行

在计算机系统结构中,CPU和内存是分开的。

寄存器存在于CPU中,是CPU的直接操作对象

寄存器种类

上述的通用寄存器,通常用于参数传递以及算数运算等通用场合

RSP为栈顶指针,RBP为栈底指针,二者用于维护程序运行时的函数,在之后的调用约定一节会对其进行讲解。

EFLAGS为标志位寄存器,用于存储CPU运行计算过程中的状态,:如进位溢出等。

RIP指针用于存储CPU下一条将会执行的指针,不能直接修改,正常情况下会每一次运行一条指令自增一条指令的长度,当发生跳转时才会以其他形式改变其值

寻址方式

汇编指令

intel中汇编两个操作数指令的目的寄存器都是第一个寄存器

计算机只能完成很基本的操作。这些操作大多是对一些寄存器的值进行修改

这些指令通过排列组合,完成复杂的功能,

两种格式:intel和AT&T

二者差别主要在于源和目的操作数顺序上

可以通过立即数寻址来进行判断

计算机在执行汇编代码时,只会顺序执行,

通过call、jmp、ret这种指令来完成跳转

所以汇编指令代码的执行流并不像高级语言程序一样流程明确

汇编指令代码会经常跳转导致可读性差一些

  1. AND(位与):

    • and 指令对两个操作数的相应位进行逻辑与运算。
    • 如果两个相应的位都是1,则结果位为1;否则为0。
    • 例如,如果 rax = 1010 (二进制),rbx = 1100 (二进制),执行 and rax, rbx 后,rax 将变为 1000 (二进制)。
  2. XOR(异或):

    • xor 指令对两个操作数的相应位进行逻辑异或运算。
    • 如果两个相应的位相同,则结果位为0;如果不同,则结果位为1。
    • 例如,如果 rax = 1010 (二进制),rbx = 1100 (二进制),执行 xor rax, rbx 后,rax 将变为 0110 (二进制)。

数上下限

如果是unsigned 也就是无符号数,数据的每一位都是代表数据

如果是signed有符号数,那么数据的最高位会被当作符号位处理

0代表正数,1代表负数。

溢出

数值有上下限范围,那么就不可避免的会有溢出情况。

以32位int为例,有以下四种溢出:

无符号上溢:0xffffffff+1变成0

无符号下溢:0-1变成0xffffffff

简单来说无符号溢出0=1+0xffffffff

有符号上溢:有符号正数0x7fffffff +1 变成负数0x80000000

有符号下溢:有符号数0x80000000-1变成正数0x7fffffff

简单来说有符号溢出0x80000000=0x7fffffff+1

这就是整数溢出。通常来说原因就是两点

1.存储位数不够

2.溢出到符号位

整数溢出一般配合别的漏洞来使用。

相关推荐
一念杂记24 分钟前
没网太崩溃!手机电脑网络共享,简单几步搞定网络共享,再也不用为没网担忧~
android·windows
小武~33 分钟前
嵌入式Linux安全启动全解析:从原理到实战
linux·网络·安全
点心快奔跑42 分钟前
超详细Windows系统MySQL 安装教程
数据库·windows·mysql
迈威通信2 小时前
矿山通信如何实现全域一体化?迈威为煤矿装上了“智慧神经网络”
科技·物联网·5g·安全·信息与通信
智驱力人工智能2 小时前
智能安全管理 基于视觉分析的玩手机检测系统 手机行为AI模型训练 边缘计算手机行为监测设备
人工智能·安全·目标检测·计算机视觉·智能手机·视觉检测·边缘计算
-曾牛3 小时前
网络安全常见的框架漏洞
安全·web安全·网络安全·渗透测试·文件包含·漏洞复现·框架漏洞
YuanDaima20483 小时前
安全协议设计入门:原理与分析
人工智能·笔记·安全·网络安全·密码学·安全协议·课程
白帽子黑客杰哥3 小时前
湖湘杯网络安全技能大赛参与形式
数据库·web安全·渗透测试·安全演练·湖湘杯·实战演练
ShineSpark11 小时前
Crashpad 在windows下编译和使用指南
c++·windows
梦昼初DawnDream11 小时前
linux安全基线
linux·运维·安全