逆向 第四章 記憶體

2021-10-14 13:55:51 字數 1583 閱讀 5902

暫存器與記憶體的區別

1.暫存器位於cpu內部,執行速度快

2.記憶體速度相對慢,但是成本低,所以可以做得很大

3.暫存器和記憶體沒有本質區別,都是儲存資料的容器,都是定寬的

4.暫存器常用的八個:eax,ecx,edx,ebx,esp,ebp,esi,edi

5.計算機中的幾個常用計量單位:byte,word,dword

6.記憶體數量特別龐大,無法每乙個記憶體單元都起乙個名字,所以用編號代替,我們稱計算機cpu是32位或者64位的,有很多書說32位計算機是因為暫存器的寬度是32位,是不準確的,因為還有很多暫存器是大於32位

byte 位元組 8bit

word 字 16bit 2位元組

dword 雙字 32bit 4位元組

1kb =

1024byte

1mb =

1024kb

1gb =

1024mb

每乙個位元組都會有乙個編號,有32根線,每一根線0和1,這根線有不同組合代表他能尋找的範圍

如0x0000000

0x0000001

0x0000002

…0xfffffffff

所以每一塊記憶體都有乙個編號,記憶體中的編號以位元組為單位,所以乙個32位計算機,能尋找的位址編號有1+ffffffff個,總共有4294967296(十進位制)種,除以1024(k),再除1024(m),再除1024(g),得到4gb,所以三十二位計算機能識別最大記憶體就是4g

所以32位計算機跟暫存器沒有關係,是最大能查詢的定址寬度(記憶體範圍)的關係(注意是正常定址,不是最大定址,32位計算機也可以安裝8g的ram)

如圖為記憶體格式

每個單元寬度為8,一位元組

【編號】,加中括號和立即數分開,如【0x00000000】即為編號,就是位址

寫16位的數

mov [

0x12345678],

0xffff

//不推薦這樣寫,要指定記憶體寬度

mov word ptr ds:

[0x12345678],

0xffff

word表示記憶體的寬度,ptr表示後面是位址,ds:是固定寫法

注意:記憶體位址不要亂寫,因為記憶體是有保護的,並不是所有記憶體都能讀寫

一定要指定記憶體寬度,因為他比暫存器大,暫存器可以直接捨棄,他是一大塊的,不能捨棄

寫入如圖**,按下f8執行,沒有報錯,但是這個有很多空間不能訪問,應該是異常

小技巧:esp裡面的位址,一定是允許的

成功修改esp裡面的值

右下角位址可以隨便用

注意:這裡可以看到右下角的數字是每四個編一次號,因此可以存32位,上面的結構圖也可以得到解釋

輸入mov eax,dword ptr ds:[0x11f74]

得到上圖

第四章 繼承

一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...

第四章 物件

三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...

第四章 其他

sizeof和strlen 區別sizeof以位元組為單位給出資料的大小,strlen 函式以字元為單位給出字串的長度。使用strlen 函式要加 include標頭檔案。sizeof計算字元時會將標誌字串結束的不可見的空字元計算在內。定義符號常量 方法一 define name value 優點 ...