2010-03-01 147 views
2

在彙編編程中完成堆棧操作(如push和pop)後,是否可以獲得堆棧的有效起始地址?在彙編編程中獲取堆棧的起始地址

+0

你的意思是起始地址(即基地址,它沒有改變),還是你真的指棧頂的地址,即堆棧指針的當前值? – 2010-03-01 13:54:27

+0

的起始基地址...甚至堆棧的頂部將盡...但最好基地址 – 2010-03-01 13:55:20

+0

基地址不會改變 - 這是堆棧指針開始在你的程序開始。堆棧地址的頂部是按下/彈出時會發生什麼變化。你究竟想要哪一個? – 2010-03-01 13:57:33

回答

1

約定是在函數的開頭將(E)SP保存到(E)BP,並使用(E)BP作爲局部變量尋址。

0

最簡單的情況就是將初始堆棧指針保存到某些需要時訪問它的變量。如果不是這種情況,請使用特定於平臺的API,例如Windows上的VirtualQuery,使用當前的SP值作爲第一個參數。基地址將在MEMORY_BASIC_INFORMATION結構的BaseAddress字段中。使用pthread函數可以完成posix任務

+0

請編輯並清理Windows與Posix。我解決了第一個問題... – bmargulies 2010-03-01 14:08:48

+0

請你解釋一下如何在MASM上完成... – 2010-03-01 16:26:02