我看到传递给函数的变量值从函数返回后变为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