我看到傳遞給函數的變量值從函數返回後變爲null。該變量被推送到堆棧,並在返回時彈出。我們有辦法找到罪魁禍首嗎?我可以保護堆棧位置嗎?我沒有檢查程序集,沒有看到任何可能會改變堆棧的rbp偏移量?如何檢測正在寫入堆棧地址的線程?
push %rbp
mov %rsp,%rbp
push %rbx
.....................
add $0x8,%rsp
pop %rbx
leaveq
我看到傳遞給函數的變量值從函數返回後變爲null。該變量被推送到堆棧,並在返回時彈出。我們有辦法找到罪魁禍首嗎?我可以保護堆棧位置嗎?我沒有檢查程序集,沒有看到任何可能會改變堆棧的rbp偏移量?如何檢測正在寫入堆棧地址的線程?
push %rbp
mov %rsp,%rbp
push %rbx
.....................
add $0x8,%rsp
pop %rbx
leaveq
只需正常調試程序。你試圖讓事情變得比他們想要的更難。
我不明白這個問題。每個堆棧都屬於某個任務(一個進程或一個線程),因此只有它自己的進程才能寫入它。顯示你真實的C代碼。你使用了'valgrind'還是'gdb'?編譯時是否啓用了所有警告('gcc -Wall -Wextra')? –
感謝您期待我有多個線程不處理..我編輯了問題。對不起,造成了混亂。 – Tectrendz
謝謝你,我確實證實了裝配中的變化都沒有提到bp的偏移量。你建議任何其他檢查發現溢出? – Tectrendz