學習筆記分享之彙編—3. 堆棧&標誌寄存器
前言:
此文章收錄在本人的《學習筆記分享》分類中,此分類記錄本人的學習心得體會,現全部分享出來希望和大家共同交流學習成長。附上分類鏈接:
//www.cnblogs.com/tibbors/category/1729804.html
學習內容:堆棧
- 堆棧的優點:臨時存儲大量數據,便於查找
- 堆棧中越往頂部地址編號越小
- 壓棧出棧變的都是棧頂
堆棧的操作分解:
前提操作:
MOV EBX,13FFDC //BASE
MOV EDX,13FFDC //TOP
操作一:壓入數據
法一:
MOV DWORD PTR DS:[EDX-4],0xAAAAAAAA //先壓入數據
SUB EDX,4 //再上移地址(寄存器)
法二:
SUB EDX,4 //先上移地址(寄存器)
MOV DWORD PTR DS:[EDX],0xBBBBBBBB //再壓入數據
法三:
MOV DWORD PTR DS:[EDX-4],0xDDDDDDDD //先壓入數據
LEA EDX,DWORD PTR DS:[EDX-4] //再通過LEA指令上移地址(寄存器)
法四:
LEA EDX,DWORD PTR DS:[EDX-4] //先通過LEA指令上移地址(寄存器)
MOV DWORD PTR DS:[EDX],0xEEEEEEEE //再壓入數據
操作二:讀取某個數據
法一:
//通過[BASE+偏移量]讀取
MOV ESI,DWORD PTR DS:[EBX-4]
法二:
//通過[TOP+偏移量]讀取
MOV EDI,DWORD PTR DS:[EDX+4]
操作三:彈出數據
法一:
MOV ECX,DWORD PTR DS:[EDX] //先彈出數據(保存到其他存儲空間)
LEA EDX,DWORD PTR DS:[EDX+4] //再下移地址(寄存器)
法二:
MOV ESI,DWORD PTR DS:[EDX] //先彈出數據(保存到其他存儲空間)
ADD EDX,4 //再下移地址(寄存器)
法三:
LEA EDX,DWORD PTR DS:[EDX+4] //先下移地址(寄存器)
MOV EDI,DWORD PTR DS:[EDX-4] //再彈出(下移前地址)數據(保存到其他存儲空間)
堆棧的專用操作:
- 操作系統默認把ESP當棧底,EBP當棧頂
- PUSH(壓棧) = 操作一
- POP(出棧) = 操作三