假设局部变量的初始值为零是否正确?

时间:2009-09-10 20:44:21

标签: assembly

如果我在asm上有一个呼叫程序:

push ebp
mov ebp esp
sub ebp, 8

我现在可以假设[ebp-4]和[ebp-8]都被初始化为零,或者它们是否有随机值?

4 个答案:

答案 0 :(得分:7)

他们之前将拥有该记忆中的任何值,这不可能是0。这本身并不是“随机的” - 事实上,它可能有些可预测;这通常没有任何好处,但是没有任何关于将它用于RNG的聪明想法:)

请记住,您在该代码中所做的只是:

  • 将EBP的当前值保存到[ESP],然后从ESP中减去4
  • 将ESP复制到EBP
  • 从EBP中减去8(你的意思是ESP?)

除非你告诉它,否则CPU不会读取任何内容。这是汇编程序的本质。此外,当在普通算术中使用时,ESP根本不是特殊的 - 它只是一个数字。

答案 1 :(得分:5)

你永远不应该依赖于此,因为这可能取决于实现。要处于可预测状态,始终初始化具有特定值的寄存器或存储单元。

答案 2 :(得分:3)

除非您明确初始化它们,否则它们肯定会有随机值。

答案 3 :(得分:2)

他们将拥有随机值。