main函数执行时EBP寄存器指向什么? (英特尔 x82 架构)
What is the EBP register pointing to when the main function executes? (Intel x82 architecture)
我知道在函数调用期间,EBP 寄存器指向被调用函数压入堆栈的第一个值。但是在第一次调用main函数的时候,EBP寄存器指向什么呢?是不是main函数第一个压入栈的局部变量?
未定义 ebp
指向函数何时进入。函数序言(它是函数的一部分)使 ebp
指向堆栈帧,尽管如果不需要序言可以省略,或者可以用 ebp
做任何其他事情,只要它恢复值回来的时候。 main
这点也不一样。
main()
之前的ebp
的值是由操作系统初始化的,所以你需要说一下你用的是什么OS。
关于Linux和libc
,在main()
之前有一个函数叫做_start
。但是,在_start
之前,ebp
和esp
的位置是由Linux内核在分配堆栈时决定的。而且,大多数时候,默认值被添加到偏移量以实现 ASLR(地址-Space 布局随机化)。
我知道在函数调用期间,EBP 寄存器指向被调用函数压入堆栈的第一个值。但是在第一次调用main函数的时候,EBP寄存器指向什么呢?是不是main函数第一个压入栈的局部变量?
未定义 ebp
指向函数何时进入。函数序言(它是函数的一部分)使 ebp
指向堆栈帧,尽管如果不需要序言可以省略,或者可以用 ebp
做任何其他事情,只要它恢复值回来的时候。 main
这点也不一样。
main()
之前的ebp
的值是由操作系统初始化的,所以你需要说一下你用的是什么OS。
关于Linux和libc
,在main()
之前有一个函数叫做_start
。但是,在_start
之前,ebp
和esp
的位置是由Linux内核在分配堆栈时决定的。而且,大多数时候,默认值被添加到偏移量以实现 ASLR(地址-Space 布局随机化)。