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

dev*_*ium 0 assembly

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

push ebp
mov ebp esp
sub ebp, 8
Run Code Online (Sandbox Code Playgroud)

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

bdo*_*lan 7

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

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

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

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


Atm*_*ons 5

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