西工大網絡空間安全學院計算機系統基礎實驗二(phase_2下——漫漫深夜過后的黎明!!!)

內存地址內存地址中的數注釋指向這塊內存的寄存器
0xffffd0e8函數phase_2的棧幀
0xffffd0e40xffffd0f4函數phase_2的棧幀
0xffffd0e00x5655b7b0函數phase_2的棧幀
0xffffd0dc0x565566ca函數read_six_numbers的返回地址,函數phase_2的棧幀
0xffffd0d80x5655af64舊%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx
0xffffd0c40xffffd100第<read_six_numbers+34>行 push %edx
0xffffd0c0

0xffffd0fc

第<read_six_numbers+38>行 push %edx
0xffffd0bc0xffffd0f8第<read_six_numbers+42>行 push %edx
0xffffd0b80xffffd0f4第<read_six_numbers+43>行 push %eax
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址%esp

圖1:實際運行與紙上分析——使用"ni"命令執行第<read_six_numbers+50>行匯編代碼之后各寄存器與棧幀的情況

是不是有點小激動了呀哈哈哈,耐住性子千萬不要著急,一步一步慢慢來哦!

內存地址內存地址中的數注釋指向這塊內存的寄存器
0xffffd0e8函數phase_2的棧幀
0xffffd0e40xffffd0f4函數phase_2的棧幀
0xffffd0e00x5655b7b0函數read_six_numbers的第一個入口參數,函數phase_2的棧幀
0xffffd0dc0x565566ca函數read_six_numbers的返回地址,函數phase_2的棧幀
0xffffd0d80x5655af64舊%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx
0xffffd0c40xffffd100第<read_six_numbers+34>行 push %edx
0xffffd0c0

0xffffd0fc

第<read_six_numbers+38>行 push %edx
0xffffd0bc0xffffd0f8第<read_six_numbers+42>行 push %edx
0xffffd0b80xffffd0f4第<read_six_numbers+43>行 push %eax
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你輸入的針對'phase_2'的字符串的地址%esp

圖2:實際運行與紙上分析——使用"ni"命令執行第<read_six_numbers+51>行匯編代碼之后各寄存器與棧幀的情況

內存地址內存地址中的數注釋指向這塊內存的寄存器
0xffffd0e8函數phase_2的棧幀
0xffffd0e40xffffd0f4函數phase_2的棧幀
0xffffd0e00x5655b7b0函數read_six_numbers的第一個入口參數,函數phase_2的棧幀
0xffffd0dc0x565566ca函數read_six_numbers的返回地址,函數phase_2的棧幀
0xffffd0d80x5655af64舊%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd1080x6
0xffffd0c80xffffd1040x5
0xffffd0c40xffffd1000x4
0xffffd0c0

0xffffd0fc

0x3
0xffffd0bc0xffffd0f80x2
0xffffd0b80xffffd0f40x1
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你輸入的針對'phase_2'的字符串的地址%esp

圖3:實際運行與紙上分析——使用"ni"命令執行第<read_six_numbers+55>行匯編代碼之后各寄存器與棧幀的情。這時是不是覺得<__isoc99_sscanf@plt>非常神奇!!!在這一步過后,我們的思路便豁然開朗了起來)

內存地址內存地址中的數注釋指向這塊內存的寄存器
0xffffd0e8函數phase_2的棧幀
0xffffd0e40xffffd0f4函數phase_2的棧幀
0xffffd0e00x5655b7b0函數read_six_numbers的第一個入口參數,函數phase_2的棧幀
0xffffd0dc0x565566ca函數read_six_numbers的返回地址,函數phase_2的棧幀
0xffffd0d80x5655af64舊%ebx的值
0xffffd0d4
0xffffd0d0%esp
0xffffd0cc0xffffd1080x6
0xffffd0c80xffffd1040x5
0xffffd0c40xffffd1000x4
0xffffd0c0

0xffffd0fc

0x3
0xffffd0bc0xffffd0f80x2
0xffffd0b80xffffd0f40x1
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你輸入的針對'phase_2'的字符串的地址

圖4:實際運行與紙上分析——使用"ni"命令執行第<read_six_numbers+60>行匯編代碼之后各寄存器與棧幀的情。

內存地址內存地址中的數注釋指向這塊內存的寄存器
0xffffd0e8函數phase_2的棧幀
0xffffd0e40xffffd0f4函數phase_2的棧幀
0xffffd0e00x5655b7b0函數read_six_numbers的第一個入口參數,函數phase_2的棧幀
0xffffd0dc0x565566ca函數read_six_numbers的返回地址,函數phase_2的棧幀
0xffffd0d80x5655af64舊%ebx的值
0xffffd0d4
0xffffd0d0%esp
0xffffd0cc0xffffd1080x6
0xffffd0c80xffffd1040x5
0xffffd0c40xffffd1000x4
0xffffd0c0

0xffffd0fc

0x3
0xffffd0bc0xffffd0f80x2
0xffffd0b80xffffd0f40x1
0xffffd0b40x565583c10x565583c1是字符串'%d %d %d %d %d %d'的地址
0xffffd0b00x5655b7b00x5655b7b0是你輸入的針對'phase_2'的字符串的地址
寄存器名稱寄存器中的值
%eax0x6

圖5:實際運行與紙上分析——使用"ni"命令執行第<read_six_numbers+63>行匯編代碼之后各寄存器與棧幀的情。因為此時我們的%eax寄存器中的值為0x6,大于0x5,所以不會跳轉到<read_six_numbers+73>這個沒有任何內容的空地址上,進而不會引爆炸彈。)

……………………

(圖6:實際運行與紙上分析——使用"ni"命令執行第<phase_2+47>行匯編代碼之后各寄存器與棧幀的情。接著,第<phase_2+50>行判斷(%esp+4)和0的大小,如果不相等就會跳到第<phase_2+64>行,可是第<phase_2+64>行就是引爆炸彈,所以不能不相等,所以%esp+4應該是0,而我們輸入的卻是1,所以萬萬不能繼續執行了)

按quit退出,接著再重復一遍,先輸入phase_1的正確字符串,接著輸入"0 1 2 3 4 5"作為我們假設的phase_2的答案,然后一路按"ni",一直到我們剛剛的那個地方,如 圖7:又來到了同樣的<phase_2+50>這個地方 所示。

圖7:又來到了同樣的<phase_2+50>這個地方。接著,第<phase_2+50>行判斷(%esp+4)和0的大小,如果不相等就會跳到第<phase_2+64>行。但是我們此時的函數棧幀中(%esp+4)的值就是0,相等,不會跳到<phase_2+64>,所以我們輸入的6個數中對了第1個數,是"0"。)

圖8:實際運行與紙上分析——使用"ni"命令執行第<phase_2+55>行匯編代碼之后各寄存器與棧幀的情況

接著使用同樣的方法,我們分別得到了剩下的幾個數為:"1 1 2 3 5",也就是說,這其實是一個以0,1開頭的斐波那契數列,所以我們針對phase_2的答案字符串即為"0 1 1 2 3 5"。

I turned the moon into something I call a Death Star.
0 1 1 2 3 5

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214732.shtml

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

相關文章

SpringIOC之ConditionEvaluator

博主介紹:?全網粉絲5W+,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰,博主也曾寫過優秀論文,查重率極低,在這方面有豐富的經驗? 博主作品:《Java項目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Netty性能好的原因是什么

Netty性能好的原因 廢話篇Netty性能好的原因是什么1. 非阻塞IO模型高效的Reactor線程模型零拷貝內存池設計無鎖串行化設計高性能序列化協議 廢話篇 相信有同學會經常被問到這樣的問題&#xff0c;不妨下次被面試官問到這種問題&#xff0c;我們可以這樣回答&#xff01; Nett…

簡單實用的firewalld命令

簡單實用的firewalld命令 一、查看防火墻是否打開二、查詢、開放、關閉端口三、查看已監聽端口四、驗證 一、查看防火墻是否打開 systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.…

map.getOrDefault

map.getOrDefault 是 Java 中的一個方法&#xff0c;用于從 Map 中獲取指定鍵的值&#xff0c;如果鍵不存在&#xff0c;則返回指定的默認值。 方法簽名如下&#xff1a; V getOrDefault(Object key, V defaultValue) 其中&#xff0c;key 是要獲取值的鍵&#xff0c;defaul…

day19_java泛型

泛型 Java 泛型&#xff08;generics&#xff09;是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制&#xff0c;該機制允許程序員在編譯時檢測到非法的類型。保證了java的安全性 泛型的本質是參數化類型&#xff0c;也就是說所操作的數據類型被指定為一個參數…

AWS EC2使用 instance profile 訪問S3

AWS EC2 instance可以使用instance profile 配置訪問S3的權限。 然后就可以直接在EC2上執行 python代碼或者AWS CLI去訪問S3了。 唯一需要注意的地方是&#xff0c;申明region。 示例代碼&#xff1a; aws s3 ls xxxx-s3-bucket --region xxx-region import boto3 client …

一文讀懂MySQL基礎知識文集(8)

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

IDEA 報錯

IDEA 報錯&#xff1a; Cannot resolve symbol&#xff1a;這通常是由于 IDEA 無法識別您正在使用的類或方法導致的。請確保您已經導入了正確的包&#xff0c;并且您的類路徑設置正確。 NullPointerException&#xff1a;這通常是由于您的代碼嘗試訪問空對象或空值導致的。請檢…

JavaScript 函數的返回值

JavaScript 函數的返回值 JavaScript 函數的返回值是函數執行后返回的值&#xff0c;可以是任意類型的值&#xff0c;包括數字、字符串、布爾值、對象等。函數的返回值通過 return 關鍵字來指定&#xff0c;如果函數沒有指定返回值&#xff0c;則默認返回 undefined。例如&…

Qt處理焦點事件(獲得焦點,失去焦點)

背景&#xff1a; 我只是想處理焦點動作&#xff0c;由于懶&#xff0c;上網一搜&#xff0c;排名靠前的一位朋友&#xff0c;使用重寫部件的方式實現。還是因為懶&#xff0c;所以感覺復雜了。于是又花了一分鐘解決了一下。 所以記錄下來&#xff0c;以免以后忘了。 思路&a…

單目相機測距(3米范圍內)二維碼實現方案(python代碼 僅僅依賴opencv)

總體思路:先通過opencv 識別二維碼的的四個像素角位置,然后把二維碼的物理位置設置為 cv::Point3f(-HALF_LENGTH, -HALF_LENGTH, 0), //tl cv::Point3f(HALF_LENGTH, -HALF_LENGTH, 0), //tr cv::Point3f(HALF_LENGTH, HALF_LENGTH, 0), //br cv::P…

四年編程成長總結

文章目錄 計算機計算機基礎知識操作系統計算機網絡 自考學習與備考考試經歷 軟考學習與準備考試成果人生成長自主學習解決問題團隊合作 總結 計算機 計算機是我學習和應用Java編程的基礎&#xff0c;它為我提供了一個強大的工具和平臺。在這四年的學習中&#xff0c;我逐漸深入…

軟件運行原理 - 內存模型 - 棧內存

說明 C/C軟件運行時&#xff0c;內存根據使用方式的不同分為堆內存和棧內存&#xff0c;棧內存使用有以下特征&#xff1a; 棧內存使用&#xff08;申請、釋放&#xff09;由系統自動分配和釋放&#xff0c;程序員不用做任何操作。棧內存重復使用&#xff0c;進入函數時數據入…

什么是特征圖?

在卷積神經網絡&#xff08;CNN&#xff09;中&#xff0c;特征圖是在傳遞給卷積層的圖像上發生卷積操作后卷積層的輸出。 特征圖是如何形成的&#xff1f; 在上面的插圖中&#xff0c;我們可以看到特征圖是如何從提供的輸入圖像中形成的。 要發送到卷積層的圖像是一個包含像…

AutoSAR(基礎入門篇)1.2-AutoSAR的發展史

目錄 一、AutoSAR成員 二、AutoSAR歷史發展 三、未使用AutoSAR前的缺點 1、原始狀態

JavaScript 和 HTML DOM 參考手冊

JavaScript 和 HTML DOM 參考手冊 js的變量類型有字符串,布爾等 在操作這些變量類型的時候,可以將他們看成是對象來操作 因為js 把一切都封裝成對象來看 獲取字符串的長度 var str hello world; console.log(str.length); //11 console.log(str.substr(0,5)); // hello c…

微服務網關組件Gateway實戰

1. 需求背景 在微服務架構中&#xff0c;通常一個系統會被拆分為多個微服務&#xff0c;面對這么多微服務客戶端應該如何去調用呢&#xff1f;如果根據每個微服務的地址發起調用&#xff0c;存在如下問題&#xff1a; 客戶端多次請求不同的微服務&#xff0c;會增加客戶端代碼…

聚首引領行業風潮!聚首品牌聯動資源價值平臺發布會正式啟航

2023年12月10日&#xff0c;由杭州建筑裝飾學會、浙江聚首聯優材料科技有限公司主辦&#xff0c;天尚設計集團、公和設計集團、銘揚工程設計集團、地標設計集團、上宸工程設計集團、華坤建筑設計院、廣廈建筑設計研究院、上海傳承博華建筑規劃設計院、航冠工程設計院、浙江鴻能…

Github項目-CNNResnet9-殘差神經網絡水果多分類項目

ResNet-論文全文完整翻譯注解 - 知乎 你必須要知道CNN模型&#xff1a;ResNet - 知乎 #!/usr/bin/env python # coding: utf-8 #https://github.com/SehajS/cnn-resnet-fruit-classification # # Classifying Fruits from their Images # # This project aims at creating a…

設計模式——建造者模式(創建型)

引言 生成器模式是一種創建型設計模式&#xff0c; 使你能夠分步驟創建復雜對象。 該模式允許你使用相同的創建代碼生成不同類型和形式的對象。 問題 假設有這樣一個復雜對象&#xff0c; 在對其進行構造時需要對諸多成員變量和嵌套對象進行繁復的初始化工作。 這些初始化代碼…