我已經在x86-64程序集(AT & T)語法中編寫了一個小程序,它的組裝非常好,但是我沒有得到我期望的結果。 我有一個變量在寄存器%rdi
,我需要修改一個子程序,我需要保留一些其他用法的原始值以後。我想要做的是將push
原始值寫入堆棧,然後在子例程結束時再次檢索它,例如,如果變量位於%rdi
中。將變量保存到堆棧(X86-64程序集)
pushq %rdi
call subroutine
movq (%rsp), %rdi
現在,我不確定這是否是正確的方法嗎?我在某處讀過一個子例程將返回值推入堆棧,但這是否意味着我在嘗試檢索變量時必須包含偏移量?
而且我知道我必須保持爲16個字節,這我不太清楚,如果我做對齊堆棧指針。如果我不這樣做,彙編程序會給我一個錯誤,或者這可能是我的程序失敗的原因?
順便說一下,這個程序是一個任務的一部分,所以我不能與你分享代碼,但我希望我的描述足夠好。
無法想象你的任務如此祕密,以至於無法共享代碼。 – Artur
這不是什麼祕密,但是如果在網站上發佈整個程序並要求其他人糾正所有錯誤,那麼我就處於作弊的邊緣。 – user680881