假设局部变量的初始值为零是否正确?
如果我有ASM呼叫过程:假设局部变量的初始值为零是否正确?
push ebp
mov ebp esp
sub ebp, 8
我可以假设现在,无论[EBP-4]和[EBP-8]初始化为零,或者他们可以有随机值?
他们将有什么价值是在存储器之前,这是不太可能0
。这本身不是“随机的” - 事实上,它可能有点可预测;这通常不会有什么好处,只是没有得到有关在使用它RNG :)
记住任何聪明的想法,你的代码所做的一切是:
- 保存当前值EBP为[ESP]然后从ESP
- 减去4复制ESP从EBP EBP
- 减去8(你的意思是ESP?)
,CPU也不会读任何东西到这个除此之外,除非你告诉它。这是汇编程序的精髓。而且,在正常算术中使用时,ESP根本不是特别的 - 它只是一个数字。
他们将随机值。
嗯?为什么downvote?它回答了这个问题,并没有错。 – 2009-09-11 07:10:36
你不应该依赖于这个,因为这可能取决于执行。处于可预测状态时,始终以特定值初始化寄存器或存储单元。
他们肯定还会有随机值,除非你明确地对它们进行初始化。
关键的原因:你所做的只是移动指针。你所做的任何事情都不会导致它们被归零。 – 2009-09-10 20:48:53
感谢spoting该子EBP,8。我真的以为是EBP:S。我现在正在阅读Barlet的80x86汇编语言和计算机体系结构程序介绍和堆栈章节,以便我终于明白堆栈是如何工作的。 – 2009-09-10 21:48:27