日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CE教程第八关——搜索4级指针

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CE教程第八关——搜索4级指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個第八題我花了好幾個小時,最后靠畫圖弄明白的。
不管是C語言還是反匯編,涉及到指針和內存,最直觀的理解方式就是畫圖。

題目

步驟 8: 多級指針: (密碼=525927)

在這一步將解釋如何使用多級指針。 在第 6 步,你已經清楚 1 級指針的概念和用途,并可以利用數值的首個地址找到存放數據真正的基址。
在本關中,你將看到 4
級指針,它由第一個指針指向第二個指針,再由第二個指針指向第三個指針,由第三個指針指向第四個指針,最終指向健康值的真正地址。 開始的幾步與在第
6
步中的操作基本相同。找出是什么訪問了這個地址,然后分析匯編指令,查找指針地址中的數值,以及它的偏移量,將它們記下來。但這次你按數值找出的仍然是一個指針,你得依據這些數值,使用同樣的操作方法找出指向這個指針的指針。看看是什么訪問了你發現的那個指針地址,分析匯編指令,留意可能的代碼和偏移量,并加以利用。
持續這種過程,直到不能更進一步查找為止(通常基址為靜態時,地址將以綠色標示)。 點擊"改變數值"改變健康值,
如果你發現列表中那些指針地址所指向的值發生同樣的變化時,那表示你可以試著將基址中的值更改為 5000,并鎖定它,以便完成本關的任務了。

備注1: 本步驟也可以使用自動匯編程序腳本或者使用指針掃描器加以解決。 備注2: 在某些情況下,可以改變 CE 軟件"代碼查找"的相關設置。
當你遇到類似于 mov eax,[eax] 的指令時,調試程序將顯示改變之后的寄存器中的值,也許利用它更容易找出指針的位置。

備注3:
你還在讀?!當你查看匯編指令時你可能已經注意到,這些指針是在相同的代碼塊(相同的程序,如果你懂匯編,可以查看程序的起始代碼)位置被讀寫。這種情況并不總會發生,但是當你在查找某個指針遇到問題的時候,沒準能起到很大的用處。


這關的意思是要找到指向變量的4級指針,在第六關的時候我學習了如何找1級指針,但是為了以后忘記了回來復習,我還是從頭開始記錄所有步驟。

?
?
?

解法

首先,讓數值變化,最終找到數值存儲的地址。


顯然,在內存中是這樣子的 ↓

由于變量值會改變,所以不寫3261,用字符串value代替。
下一步,我想知道這個變量被哪條語句修改了,只需右鍵搜索結果,選擇“找出是什么改寫了這個地址”
然后點擊游戲按鈕,改變變量值。

發現是這條指令改寫了變量值,esi+18 就是value的地址(也就是前面搜索到的0019DE10),eax是新值。esi 就是我們要找的第一個指針,它加上一個偏移量18就指向了value,做一個減法算出esi的值等于 0019DDF8。


要尋找二級指針,只需要找到是誰存儲了 0019DDF8。


做法是開始新的掃描,16進制搜索 0019DDF8,

一般會找到唯一結果

內存示意圖

接下來,希望找到誰通過 0019DDF8 修改了value,右鍵剛才的結果,選擇“誰訪問了…”
訪問 06508070 可能就是間接修改value的代碼。修改value,發現有兩條語句訪問了 06508070

我們要關注的是第二條 mov esi,[esi]
源操作數沒有偏移,意味著二級指針不需要加偏移就能找到一級指針,示意圖如下:


同樣地,16進制搜索這個 06508070,找到其地址。(如果有多個結果,只需看看誰訪問了它,修改value無結果的就可以排除了)
只有第五個地址,修改value會被訪問。

和上一步一樣的推理過程,畫出內存示意圖如下。


至此,找到了第二級指針。用同樣的方法,直到找到顏色為綠色的地址,即第四級指針。

這個 006426E0 就是四級指針了。補上完整的內存示意圖:

最后,點擊手動添加地址,勾選指針,填入基址 006426E0,CE自動計算出三級指針的值 0011DD30,如下圖:

根據內存示意圖,依次添加 0C 14 0 18 偏移量,就能找到 value 啦!


最后根據題目要求,將數值改為5000,鎖定他,然后改變指針,即可通關。
這關的意思是,有些變量是動態分配的,并且可能有多級指針,我們要找到最高級的那個不變的指針,才能一直修改變量。

#include <stdio.h> #include <malloc.h> int main() {//__asm {// mov eax, 5// add eax, 6//}int *p1 = (int *)malloc(4); int **p2 = &p1;int ***p3 = &p2;int ****p4 = &p3;****p4 = 100;printf("%d\n", *p1);printf("%d\n", **p2);printf("%d\n", ***p3);printf("%d\n", ****p4); ****p4 = 5000;printf("%d\n", *p1);printf("%d\n", **p2);printf("%d\n", ***p3);printf("%d\n", ****p4); return 0; }

以C語言舉例,其實就是要找到 p4。

總結

以上是生活随笔為你收集整理的CE教程第八关——搜索4级指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。