天天看點

0day安全學習筆記-第一章

1.2.1 PE檔案格式

.text 由編譯器産生,存放二進制機器代碼,是反彙編和調試的對象

.data 初始化的資料庫,如宏定義、全局、靜态變量。

.idata 可執行檔案所使用的動态連接配接庫等外來函數與檔案的資訊

.rsrc 存放的是程式的資源,如圖示、菜單

1.2.2 虛拟記憶體

     通過虛拟記憶體管理器的映射,可以使得每個程序都以為自己有大量的記憶體空間可以通路,但是每個程序在運作時并不會用到太大的記憶體空間,是以當它們不适用那些“虛拟位址”的時候,這些位址對于程序來說就是一筆“無形的财富”當需要進行實際的記憶體操作時,記憶體管理器才會把“虛拟位址”和“實體位址”聯系起來。  可以将其類比為銀行與儲戶

1.2.3 PE檔案與虛拟記憶體之間的映射

   1)檔案偏移位址(File Offset): 資料在PE檔案中的位址叫檔案偏移位址,是檔案在磁盤上存放時相對于檔案開頭的偏移

   2)裝載基址(Image Base): PE檔案裝入記憶體時的基位址。預設情況下,EXE檔案在記憶體中的基位址時0x00400000,DLL檔案是0x10000000。這些位置可以通過修改編譯選項來更改。

   3)虛拟記憶體位址(Virtual Address,VA): PE檔案中的指令被裝入記憶體後的位址

   4)相對虛拟位址(Relative Virtual Address,RVA): 相對虛拟位址是記憶體位址對于映射基址的偏移量

 虛拟記憶體位址、裝載基址、相對虛拟記憶體位址三者之間的關系:                           VA = Image + RVA

 PE檔案存放:PE資料節的大小永遠為0x200的整數倍 記憶體中的節的大小永遠為0x1000的整數倍 例:若虛拟記憶體中0x00404141處的一條指令,那麼若要換算出這條指令載檔案中的偏移量,

則有: 檔案偏移量 = 0x00404141 - 0x00400000 -(0x1000 - 0x400) = 0x3541、

           檔案偏移位址和RVA之間的對應關系如下圖所示:

0day安全學習筆記-第一章

節偏移是由于存儲單元差異引起的節位址差,其值為:RVA-檔案偏移量

檔案偏移位址與虛拟記憶體位址之間換算關系為:

檔案偏移位址 = VA - Image Base - 節偏移

      = RVA - 節偏移

OllyDbg部分快捷鍵

F8 單步執行 遇到函數調用指令不跟入

F7 單步執行 遇到函數調用指令跟入

F2 設定斷點 兩次取消斷點

F4 執行到目前光标所選中的指令 遇到循環可以執行到循環結束後的指令

F9 運作程式 運作程式直到斷點

Ctrl + G 檢視任意位置處的資料 指令區、棧區、記憶體區都可以用

IDA Pro 部分快捷鍵

快捷鍵功能

; 為目前指令添加全文交叉引用的注釋

n 定義或修改名稱,通常用來标注函數名

g 跳轉到任意地方觀察代碼

Ese 傳回到跳轉之前的位置

D 分别按位元組、字、雙字的形式顯示資料

A 按照ASCII形式顯示資料

ida中左側的.text位址為VA,即虛拟位址

lea 指令

LEA reg16,mem LEA指令将存儲器操作數mem的4位16進制偏移位址送到指定的寄存器。這裡,源操作數必須是存儲器操作數,目标操作數必須是16位通用寄存器。因該寄存器常用來作為位址指針,故在此最好選用四個間址寄存器BX,BP,SI,DI之一。

je與jne

je = jmp equal jne = jmp not equal

繼續閱讀