逆向工程核心原理学习笔记(十一):栈
棧(stack)用途廣泛,通常用于存儲(chǔ)局部變量、傳遞函數(shù)參數(shù),保存函數(shù)返回地址等。
調(diào)試程序需要不斷查看棧內(nèi)存,這是很有必要的。
棧是一種數(shù)據(jù)結(jié)構(gòu),按照后進(jìn)先出的原則存儲(chǔ)數(shù)據(jù)。
棧的特征:
一個(gè)進(jìn)程中,棧頂指針(ESP)初始狀態(tài)指向棧頂端。
執(zhí)行PUSH命令將數(shù)據(jù)壓入棧的時(shí)候,棧頂指針就會(huì)上移到棧頂端。
執(zhí)行POP命令從棧中彈出數(shù)據(jù)時(shí),若棧為空,那么棧頂指針重新移動(dòng)到棧底端。
換言之,棧時(shí)一種高地址向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)。
棧操作實(shí)例:
此時(shí)棧頂指針ESP指向19FF7C
執(zhí)行完P(guān)USH命令:
棧頂指針ESP減少了4,指向了12FF78地址
繼續(xù)執(zhí)行POP命令:
執(zhí)行完發(fā)現(xiàn)ESP增加了4個(gè)字節(jié),棧又變成了初始狀態(tài)。
總結(jié)一下規(guī)律:
向棧內(nèi)壓入數(shù)據(jù)時(shí),棧頂指針減小,向低地址移動(dòng)。
從棧內(nèi)彈出數(shù)據(jù)時(shí),棧頂指針增加,向高地址移動(dòng)。
后進(jìn)先出。
頂總結(jié)
以上是生活随笔為你收集整理的逆向工程核心原理学习笔记(十一):栈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 逆向工程核心原理学习笔记(十):IA-3
- 下一篇: 逆向工程核心原理学习笔记(十二):分析a