【问题标题】:What's the values of all the general-purpose registers, when a program starts running? [duplicate]当程序开始运行时,所有通用寄存器的值是多少? [复制]
【发布时间】:2012-05-22 15:30:16
【问题描述】:

可能重复:
What is default register state when program launches (asm, linux)?

我知道 %esp 和 %eip 应该由操作系统内核设置为适当的值,以便程序可以运行,但其他寄存器包括 %ebp,%eax,%ebx,%ecx,%edx,%esi, %edi。操作系统内核会在程序运行之前初始化它们吗?他们应该有什么价值观?

程序开始运行时 %esp 的值应该是多少?

【问题讨论】:

  • 内核将如何初始化它们,为什么?根据您的源代码,我猜它们在使用时已被初始化。

标签: c assembly operating-system linux-kernel x86


【解决方案1】:

如果您询问 C 程序 - 您不知道,这不关您的事。

对于装配,我也不认为它们具有有意义的价值。
执行main 所需的信息——参数计数、参数向量和环境指针——都在堆栈上。

this Linux Gazette article中查看更多信息。

【讨论】:

  • 我相信存储在里面的值应该是最后一个内存页的值,或者说是处理器交换到这个(新)进程之前执行的最后一个并行进程。在这个假设下应该可以读取其他进程的特定运行时状态,但我不确定
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 2013-09-21
  • 1970-01-01
  • 2017-10-13
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
相关资源
最近更新 更多