C 当主函数执行时,EBP寄存器指向什么?(英特尔x82体系结构)
我知道在函数调用期间,EBP寄存器指向被调用函数推送到堆栈上的第一个值。但是当第一次调用main函数时,EBP寄存器指向什么?它是主函数推送到堆栈上的第一个局部变量吗 输入函数时,C 当主函数执行时,EBP寄存器指向什么?(英特尔x82体系结构),c,assembly,x86,calling-convention,C,Assembly,X86,Calling Convention,我知道在函数调用期间,EBP寄存器指向被调用函数推送到堆栈上的第一个值。但是当第一次调用main函数时,EBP寄存器指向什么?它是主函数推送到堆栈上的第一个局部变量吗 输入函数时,ebp指向的位置未定义。函数序言(是函数的一部分)使ebp指向堆栈帧,但如果不需要序言,则可以省略它,或者可以使用ebp执行任何其他操作,只要它在返回时恢复值main在这方面没有什么不同。在输入函数时,ebp指向的位置未定义。函数序言(是函数的一部分)使ebp指向堆栈帧,但如果不需要序言,则可以省略它,或者可以使用eb
ebp
指向的位置未定义。函数序言(是函数的一部分)使ebp
指向堆栈帧,但如果不需要序言,则可以省略它,或者可以使用ebp
执行任何其他操作,只要它在返回时恢复值main
在这方面没有什么不同。在输入函数时,ebp
指向的位置未定义。函数序言(是函数的一部分)使ebp
指向堆栈帧,但如果不需要序言,则可以省略它,或者可以使用ebp
执行任何其他操作,只要它在返回时恢复值main
在这方面没有什么不同。在操作系统初始化main()
之前,ebp
的值,因此您需要说明您使用的是什么操作系统
说到Linux和
libc
,在main()
之前有一个函数,叫做\u start
。但是,在\u start
之前,ebp
和esp
的位置由Linux内核在分配堆栈时决定。而且,大多数情况下,默认值被添加到偏移量中,以实现ASLR(地址空间布局随机化)。在操作系统初始化main()
之前,ebp
的值,因此您需要说明您使用的是什么操作系统
说到Linux和
libc
,在main()
之前有一个函数,叫做\u start
。但是,在\u start
之前,ebp
和esp
的位置由Linux内核在分配堆栈时决定。而且,大多数情况下,为了实现ASLR(地址空间布局随机化),默认值被添加到偏移量中。实际上,如果ebp
被用作帧指针,它通常指向旧的ebp
,因为正常的函数输入代码是push ebp;mov ebp,esp
。实际上,如果将ebp
用作帧指针,它通常指向旧的ebp
,因为正常的功能输入代码是push ebp;mov ebp,esp
。Initialebp
在ABI中未定义,但linux内核将其设置为零。@Jester:在ABI中未定义,但在运行main()
时肯定没有定义。或者你会有一个真正的问题…它是未定义的,即使在进入main
,不,这不会造成问题,因为任何想要帧指针的函数都必须为自己设置它。请参阅@StenSoft的答案。Initialebp
在ABI中未定义,但linux内核将其设置为零。@Jester:在ABI中未定义,但在运行main()
时肯定不会。或者你会有一个真正的问题…它是未定义的,即使在进入main
,不,这不会造成问题,因为任何想要帧指针的函数都必须为自己设置它。见@StenSoft的答案。