簡體   English   中英

裝配如何正確使用堆棧

[英]How does Assembly Work with Stack Correctly

我總是對如何計算堆棧的伸展有疑問。 比如我arm64的參數超過8個的時候,他居然用了我之前的function調用棧的面積。 BL進入function后,用SP加回獲取參數,相當於穿越了一個棧。 在這種情況下,他如何避免污染之前的堆棧? 謝謝您的回答

你是對的:在調用你的 function 之前,不適合寄存器的 function arguments 將被推入堆棧。 因此,它們將位於從SP進入 function 時具有正偏移的地址,我明白為什么您可能擔心訪問此 memory 不安全。 然而,這個 memory 實際上是“你的”。

ARM 過程調用標准第 6.4.2 節規定“允許被調用者修改用於從調用者接收參數值的任何堆棧空間”。 所以,沒有必要擔心。 調用者希望您訪問此 memory,甚至可以根據需要對其進行修改,如果您這樣做,什么都不會破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM