為什麼修改esp暫存器會觸發異常?

時間 2021-05-05 18:17:42

1樓:北極

但這種做法不可取,也不可能實現。

首先esp的值不僅僅儲存在esp裡,換句話說,指向棧上的東西,不僅僅是只有esp,比如ebp也是可以用來做定址的。甚至在記憶體裡,多級指標都是指向舊的記憶體區域,你不可能也沒辦法把這些記憶體裡的資料都指向新的棧空間,因為對於記憶體來說,都是乙個乙個數值,它是指標,還是乙個整型數,沒人知道。

所以, 跟許可權無關,你這個思路本身就是錯的。

2樓:張強

修改esp時要確定修改的位址是可用的,不是受cpu和系統保護的,當然裸機上你可以使用任意位址

並且修改了esp,資料也要造上去,並且要造對,不然pop時資料就亂掉了

3樓:chainhelen

不考慮正常的編譯流程

問題中 如果將esp設定為0x606200

雖然其實是同乙個實體地址 ,按照我對於上下文的理解,這兩個並不是指向同乙個實體地址.

4樓:半導體人類研究所所長

哥哥,esp是堆疊首位址,手工pop之後棧亂了,把編譯器預生成的push,pop對打亂了,只有正常的push,pop一壓一彈才能保證正常執行

暫存器和儲存器有什麼異同?

暫存器是一種儲存器啊,這是大概念和小概念的問題,集合與子集的關係 儲存器按照到cpu距離由近到遠 訪存速度由高到低 排列分別是暫存器,快取,主存,輔存。ROM是唯讀儲存器,僅限於儲存bios一類的程式 請看william Stallings的Computer Organization and Arc...

為什麼X86的暫存器數量沒有隨著效能的提公升而增加?

幸福渠水到俺村 那是指令集可見暫存器,不是物理暫存器,指令集可見暫存器為了維持相容性,不能做輕易的改動。x86指令可以直接訪問記憶體。所以ISA暫存器數目並不是非常重要。現代處理器內部已經微碼化了,並且擁有上百個物理暫存器,例如Sunnycove 就有多達280個整數暫存器,微碼化之後,很多直接訪問...

C 中函式的引數傳遞中暫存器的作用是什麼?

Sting 暫存器的作用跟函式的呼叫約定有關,而呼叫約定又跟編譯器有關,c 標準沒有這方面的規定。以vc來說,大致有這麼幾種 cdecl,stdcall,fastcall,thiscall,vectorcall。呼叫約定規定了引數如何傳遞 通過暫存器還是棧,左到右還是右到左進棧 值如何返回,呼叫方還...