2012-08-26 30 views
0

我看到傳遞給函數的變量值從函數返回後變爲null。該變量被推送到堆棧,並在返回時彈出。我們有辦法找到罪魁禍首嗎?我可以保護堆棧位置嗎?我沒有檢查程序集,沒有看到任何可能會改變堆棧的rbp偏移量?如何檢測正在寫入堆棧地址的線程?

push %rbp 
mov %rsp,%rbp 
push %rbx 

..................... 



add $0x8,%rsp 
pop %rbx 
leaveq 
+2

我不明白這個問題。每個堆棧都屬於某個任務(一個進程或一個線程),因此只有它自己的進程才能寫入它。顯示你真實的C代碼。你使用了'valgrind'還是'gdb'?編譯時是否啓用了所有警告('gcc -Wall -Wextra')? –

+0

感謝您期待我有多個線程不處理..我編輯了問題。對不起,造成了混亂。 – Tectrendz

+0

謝謝你,我確實證實了裝配中的變化都沒有提到bp的偏移量。你建議任何其他檢查發現溢出? – Tectrendz

回答

1

我認爲操作系統應該保護你的進程免受任何其他進程的干擾。你確定你的程序中沒有內存損壞嗎?你有多個線程?那些比另一個流氓程序更可能是罪魁禍首。

+1

抱歉造成混淆。我有多個線程 – Tectrendz

+0

@anio:線程不是進程。 –

+0

@R我的錯最初我問錯了問題,後來編輯,與此同時anio回答。 – Tectrendz

1

只需正常調試程序。你試圖讓事情變得比他們想要的更難。