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.溢出到符号位
整数溢出一般配合别的漏洞来使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现多数相加,但是传的参不固定

一、情景 一般实现的加法和减法等简单的相加减函数的话。一般都是写好固定传的参数。比如: function add(a,b) {return a b;} 这是固定的传入俩个,如果是三个呢,有人说当然好办! 这样写不就行了! function add(a…

vue中自定义设置多语言(包括使用vue-i18n),并且运行js脚本自动生成多语言文件

在项目中需要进行多个国家语言的切换时,可以用到下面方法其中一个 一、自定义设置多语言 方法一: 可以自己编写一个设置多语言文件 在项目新建js文件,命名为:language.js,代码如下 // language.js 文档 let languagePage {CN…

聊一下Maven打包的问题(jar要发布)

文章目录 一、问题和现象二、解决方法(1)方法一、maven-jar-pluginmaven-dependency-plugin(2)方法二、maven-assembly-plugin 一、问题和现象 现在的开发一直都是用spring boot,突然有一天,要自己开发一个…

Django之项目开发(二)

目录 一、安装和使用uWSGI 1.1、安装 1.2、配置文件 1.3、启动与停止uwsgi 二、安装nginx 三、Nginx 配置uWSGI 四、Nginx配置静态文件 五、Nginx配置负载均衡 一、安装和使用uWSGI uWSGI 是一个 Web 服务器,可以用来部署 Python Web 应用。它是一个高性能的通用的 We…

味蕾与理解:应对自闭症儿童挑食的策略与理解

在星贝育园自闭症康复学校,我们深知饮食习惯对孩子们的成长至关重要,而自闭症儿童的挑食问题往往比同龄儿童更为突出,给家长和照顾者带来了额外的挑战。今天,作为这里的老师,我想与大家分享一些应对自闭症儿童挑食的策…

(南京观海微电子)——电阻应用及选取

什么是电阻? 电阻是描述导体导电性能的物理量,用R表示。 电阻由导体两端的电压U与通过导体的电流I的比值来定义,即: 所以,当导体两端的电压一定时,电阻愈大,通过的电流就愈小;反之&…

鸿蒙应用实践:利用扣子API开发起床文案生成器

前言 扣子是一个新一代 AI 应用开发平台,无需编程基础即可快速搭建基于大模型的 Bot,并发布到各个渠道。平台优势包括无限拓展的能力集(内置和自定义插件)、丰富的数据源(支持多种数据格式和上传方式)、持…

[Unity入门01] Unity基本操作

参考的傅老师的教程学了一下Unity的基础操作: [傅老師/Unity教學] Unity3D基礎入門 [華梵大學] 遊戲引擎應用基礎(Unity版本) Class#01 移动:鼠标中键旋转:鼠标右键放大:鼠标滚轮飞行模式:右键WASDQEFocus模式&…

算法设计与分析 实验5 并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 (一)基准算法 (二)高效算法 五、实验结论 一、实验目的 1. 掌握图的连通性。 2. 掌握并查集的基本原理和应用。 二、问题描述 在图论中,一条边被称…

基于Android Studio订餐管理项目

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 能够实现登录,注册、首页、订餐、购物车,我的。 用户注册后,登陆客户端即可完成订餐、浏览菜谱等功能,点餐,加入购物车,结算,以及删减…

【学习笔记】操作系统--万字长文

计算机操作系统 文章目录 计算机操作系统引言 操作系统基本概念第一章 引论目标和作用操作系统发展历程单道批处理系统多道批处理系统分时系统实时系统 基本特征并发共享虚拟异步性(不确定性) 操作系统主要功能处理机管理内存管理设备管理文件管理 第二章…

工程化:Commitlint / 规范化Git提交消息格式

一、理解Commitlint Commitlint是一个用于规范化Git提交消息格式的工具。它基于Node.js,通过一系列的规则来检查Git提交信息的格式,确保它们遵循预定义的标准。 1.1、Commitlint的核心功能 代码规则检查:Commitlint基于代码规则进行检查&a…

汇聚荣拼多多电商的技巧有哪些?

在电商平台上,汇聚荣拼多多以其独特的商业模式和创新的营销策略吸引了大量消费者。那么,如何在这样一个竞争激烈的平台上脱颖而出,成为销售佼佼者呢?本文将深入探讨汇聚荣拼多多电商的成功技巧。 一、精准定位目标客户群体 首先,…

绝区肆--2024 年AI安全状况

前言 随着人工智能系统变得越来越强大和普及,与之相关的安全问题也越来越多。让我们来看看 2024 年人工智能安全的现状——评估威胁、分析漏洞、审查有前景的防御策略,并推测这一关键领域的未来可能如何。 主要的人工智能安全威胁 人工智能系统和应用程…

C-11 三角剖分的调研

C-11 三角剖分算法 三角剖分就是将输入的多边形,分割成一系列互不重叠的三角形,其重要性就在这不多赘述。这个是一个别人总结的链接:http://vterrain.org/Implementation/Libs/triangulate.html 图片链接:http://www-cgrl.cs.m…

基于CentOS Stream 9平台搭建MinIO以及开机自启

1. 官网 https://min.io/download?licenseagpl&platformlinux 1.1 下载二进制包 指定目录下载 cd /opt/coisini/ wget https://dl.min.io/server/minio/release/linux-amd64/minio1.2 文件赋权 chmod x /opt/coisini/minio1.3 创建Minio存储数据目录: mkdi…

springboot校园安全通事件报告小程序-计算机毕业设计源码02445

Springboot 校园安全通事件报告小程序系统 摘 要 随着中国经济的飞速增长,消费者的智能化水平不断提高,许多智能手机和相关的软件正在得到更多的关注和支持。其中,校园安全通事件报告小程序系统更是深得消费者的喜爱,它的出现极大…

《Programming from the Ground Up》阅读笔记:p19-p48

《Programming from the Ground Up》学习第2天,p19-p48总结,总计30页。 一、技术总结 1.object file p20, An object file is code that is in the machine’s language, but has not been completely put together。 之前在很多地方都看到object fi…

Git使用中遇到的问题(随时更新)

问题1.先创建本地库,后拉取远程仓库时上传失败的问题怎么解决? 操作主要步骤: step1 设置远程仓库地址: $ git remote add origin gitgitee.com:yourAccount/reponamexxx.git step2 推送到远程仓库: $ git push -u origin "master&qu…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现,池化技术的核心思想就是实现资源的复用,避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程,让线程执行完任务之后不进行销毁,而是继续去处理其它线程已经提交的任务。 …