2012-08-26 27 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

只需正常调试程序。你试图让事情变得比他们想要的更难。