暫存器:
esp:棧指標暫存器/當前堆疊用的位置
堆疊是從大位址到小位址的順序使用的。
堆疊的使用:儲存資料
mov dword ptr ds:[0x18ff88], 1 //向堆疊寫入資料太複雜了?試試堆疊相關指令!mov dword ptr ds:[0x18ff84], 2 //向堆疊寫入資料
sub esp, 8 //設定esp、告訴系統堆疊使用到了**
add esp, 8 //設定esp、寫入的資料不需要了,恢復堆疊位置
push r32堆疊的使用:釋放資料push r16
push m16
push m32
push imm8/imm16/imm32
push dword ptr ds:[0x18ffa4]太複雜了?看看下面的指令!push 1
push 2
push 3
add esp, 0xc //上面壓入的資料不需要了, 可以直接恢復堆疊
但是,如果不用某個資料了,又需要把資料存放到其他地方怎麼辦呢?
push ecx
mov ecx, 0x10
mov ecx, dword ptr ds:[esp] //將原資料取出來放回去
add esp, 0x4 //恢復棧頂指標暫存器
pop r32pop r16
pop m16
pop m32
堆是堆,棧歸棧
堆是堆,棧歸棧 第一 堅決澄清 堆是堆,棧歸棧。第二 曾經的 堆疊 再不允許重談,簡直就是扯淡!第三 下面內容均屬於從記憶體分配角度的闡述,不要與資料結構混淆。1 程式的記憶體分配 1 記憶體分配詳解 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,...
堆疊入門 堆和棧區別
在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...
堆疊入門 堆和棧區別
在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...