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.pswp.cn/diannao/42445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42445.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Text2SQL提問中包括時間的實戰方案

大家好,我是herosunly。985院校碩士畢業,現擔任算法研究員一職,熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名,CCF比賽第二名,科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的見解。曾經輔導過若干個非計算機專業的學生進入到算法…

實現多數相加,但是傳的參不固定

一、情景 一般實現的加法和減法等簡單的相加減函數的話。一般都是寫好固定傳的參數。比如: 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訂餐管理項目

目錄 項目介紹 圖片展示 運行環境 獲取方式 項目介紹 能夠實現登錄,注冊、首頁、訂餐、購物車,我的。 用戶注冊后,登陸客戶端即可完成訂餐、瀏覽菜譜等功能,點餐,加入購物車,結算,以及刪減…

【學習筆記】操作系統--萬字長文

計算機操作系統 文章目錄 計算機操作系統引言 操作系統基本概念第一章 引論目標和作用操作系統發展歷程單道批處理系統多道批處理系統分時系統實時系統 基本特征并發共享虛擬異步性(不確定性) 操作系統主要功能處理機管理內存管理設備管理文件管理 第二章…

python `queue` 模塊提供了同步的、線程安全的隊列類

在Python中,queue 模塊提供了同步的、線程安全的隊列類,這使得在多線程環境下共享數據變得簡單。下面是一個使用 queue.Queue 的并發編程示例,其中使用了 threading 模塊來創建多個線程,這些線程將向隊列中添加元素并從隊列中取出…

探索 WebKit 的前沿之旅:HTML5 新特性的卓越處理

探索 WebKit 的前沿之旅:HTML5 新特性的卓越處理 隨著 Web 技術的飛速發展,HTML5 已經成為構建現代網頁和應用的基石。WebKit,作為領先的瀏覽器引擎之一,承載著將這些創新技術轉化為用戶可感知體驗的使命。本文將深入探討 WebKit…

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

一、理解Commitlint Commitlint是一個用于規范化Git提交消息格式的工具。它基于Node.js,通過一系列的規則來檢查Git提交信息的格式,確保它們遵循預定義的標準。 1.1、Commitlint的核心功能 代碼規則檢查:Commitlint基于代碼規則進行檢查&a…

匯聚榮拼多多電商的技巧有哪些?

在電商平臺上,匯聚榮拼多多以其獨特的商業模式和創新的營銷策略吸引了大量消費者。那么,如何在這樣一個競爭激烈的平臺上脫穎而出,成為銷售佼佼者呢?本文將深入探討匯聚榮拼多多電商的成功技巧。 一、精準定位目標客戶群體 首先,…

Python魔法函數(Magic Methods簡介

在 Python 中,魔法函數(Magic Methods)也稱為雙下劃線方法(Dunder Methods),是指那些名字以雙下劃線開頭和結尾的特殊方法。 這些方法可以讓您的自定義類實現一些特定的行為,從而與 Python 的內…

絕區肆--2024 年AI安全狀況

前言 隨著人工智能系統變得越來越強大和普及,與之相關的安全問題也越來越多。讓我們來看看 2024 年人工智能安全的現狀——評估威脅、分析漏洞、審查有前景的防御策略,并推測這一關鍵領域的未來可能如何。 主要的人工智能安全威脅 人工智能系統和應用程…

Qt 繪圖詳解

文章目錄 頭文件和構造函數啟用反鋸齒功能繪制矩形繪制圓角矩形繪制橢圓繪制圓弧繪制弦繪制凸多邊形繪制圖片繪制直線繪制多條直線繪制多點連接的線繪制路徑繪制扇形繪制點繪制文本擦除矩形區域填充矩形填充路徑 頭文件和構造函數 #include "mainwindow.h" #include…

C-11 三角剖分的調研

C-11 三角剖分算法 三角剖分就是將輸入的多邊形,分割成一系列互不重疊的三角形,其重要性就在這不多贅述。這個是一個別人總結的鏈接:http://vterrain.org/Implementation/Libs/triangulate.html 圖片鏈接:http://www-cgrl.cs.m…