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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

EIP寄存器

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EIP寄存器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EIP寄存器,用來存儲CPU要讀取指令的地址,CPU通過EIP寄存器讀取即將要執行的指令。每次CPU執行完相應的匯編指令之后,EIP寄存器的值就會增加。

一、因為80386 CPU的尋址范圍是4GB,所以它的尋址模式是平坦模式的。CPU通過讀取EIP寄存器執行匯編指令的大致過程如下:
1. 首先PE loader裝載我們的PE文件,讀取PE文件的基地址和入口RVA地址(相對于基地址的偏移),并且讀取相應級表結構的值,然后將程序映射到內存;
2. 映射到內存以后,PE loader把返回的程序入口點給EIP寄存器賦值,然后通知CPU:我映射完了,你可以執行了。然后CPU通過將EIP的值傳送到輸入輸出電路,并送入相應的地址總線上,再通過EIP寄存器讀取EIP偏移地址中的二進制數據(通常為匯編指令),并傳送到數據總線上,最后傳送到指令緩沖區。
3. 傳送到指令緩沖區后,EIP會自動的增加其讀入指令的數量,以便往下執行。最后CPU執行控制器中地址指令緩沖區的指令并且往下執行。
?
CPU每次執行控制器讀取完,相應的就再通過EIP寄存器去進行下一次的讀取指令工作。每次CPU讀取指令到指令緩沖區,相應的EIP寄存器的值增加,增加大小的就是讀取指令的字節大小。
?
舉個例子:
假設程序的入口點為匯編指令:
? ? ? ? ? PUSH ? EBP ? ?(注:此時EIP寄存器+指令字節大小)
執行過程如下:
? ? ? ? ? CPU 讀取EIP寄存器值
? ? ? ? ? 來到EIP值的偏移
? ? ? ? ? 讀取PUSH?
? ? ? ? ? 存放指令到指令緩沖區?
? ? ? ? ? 執行
? ? ? ? ? 重新讀取EIP寄存器值
? ? ? ? ? .................反復循環
?二、執行完JMP指令后,EIP的值會直接變成后面要跳轉的地址。
?
舉個例子:

? ? ? ?假設之前EIP = 00403021h ,執行JMP ?00403058H 之后,EIP = 00403058H

總之,CPU每次執行指令都要先讀取EIP寄存器的值,然后定位EIP指向的內存地址(偏移地址),并且讀取匯編指令,最后執行。

總結

以上是生活随笔為你收集整理的EIP寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

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