eip暫存器儲存著我們cpu要讀取指令的位址,沒有了它,cpu就無法讀取下面的指令(通俗點講cpu就無法執行。每次相應彙編指令執行完相應的eip值就會增加。
因為80386 cpu的定址範圍是4gb。所以它的定址模式是平坦模式的。這裡我描述下cpu通過讀取eip暫存器執行的大致過程。。
此時我們假設乙個程式開始執行了。首先pe loader裝載我們的pe檔案,讀取我們pe檔案的基位址和入口rva位址(相對於基位址的偏移),並且讀取相應節表結構的值,然後將我們的程式對映到記憶體。
此時,對映到記憶體以後.. 此時pe loader把返回的程式入口點給cpu的eip暫存器賦值,然後通知我們的cpu:「 並且說:我對映完了,你可以執行了。eip也相應的賦值了。此時cpu知道了eip的值,那麼它通過將eip的值傳送到輸入輸出電路,並送入相應的位址匯流排上。那麼此時cpu就通過eip讀取eip偏移上的二進位制資料(我這裡用彙編指令來表示)併發送到資料匯流排上,最後傳送到指令緩衝區。傳送到指令緩衝區後,那麼此時eip會自動的增加其讀入指令的數量,以便往下執行, 最後執行控制器第七指令緩衝區的指令並且往下執行。
我們cpu每次執行控制器讀取完,相應的就在通過eip暫存器去進行下一次的讀取指令工作。。每次cpu讀取指令到指令緩衝區,相應的eip暫存器的值增加,增加大小的就是讀取指令的位元組大小(也可以說是長度)。。
舉個例子 我們程式的入口點是
push ebp 這個彙編指令。
(注:此時eip+ 讀取指令的大小)
首先cpu - > 讀取eip - > 來到eip值的偏移 - > 讀取push ebp -> 存放指令到指令緩衝區 - > 執行.. 反覆迴圈
這裡還要介紹乙個jmp指令,大家都比較熟悉吧。。 但是你是否知道每次執行jmp 後,eip的值的變化呢。其實你猜測也可以猜測到。jmp顧名思義 跳轉指令。執行後 eip的值=後面要跳轉的位址。
舉個例子:
假設之前eip = 00403021h ,執行jmp 00403058h 。執行完指令後eip = 00403058h
彙編基礎知識3之移位和乘除
彙編真的挺有意思的,整理出了以前的學習的基本知識,為了圖快都拿的書的截圖測試 但是我親測有效,放心學習之,學彙編,除了這些,上看雪 搜尋玩命,看他的 唄 2018.5.7 shl 指令 邏輯左移 把目的運算元內的每位左移,以0填充最低位。shl 指令的乙個最重要的應用就是用於實現與2 的次冪的快速乘...
一 二章 彙編知識整理之基礎知識,暫存器
機器語言其實就是和機器交流的語言,是機器指令的集合,機器指令可以控制計算機的一系列的命令。它是一系列二進位制語言,計算機將其轉化為一系列高低電平,來驅動計算機的電器器件,從而達到某些功能。由於機器語言是一堆二進位制語言,可讀性非常差,所以出現了組合語言,目的是為了更好的閱讀還有書寫 1.彙編指令 機...
三章 彙編知識整理之暫存器(記憶體訪問)
乙個字16位,乙個記憶體單元8位,儲存乙個字需要兩個記憶體單元,並且這兩個單元一般是連續的。高8位存放高位位元組,低8位存放低位位元組。字單元 存放乙個字型資料的記憶體單位,由兩個位址連續的記憶體單元組成。ds是段暫存器,通常來存放我們要讀取的資料的段位址,xx 表示偏移位址為xx的記憶體單元,有了...