在尝试理解过程中的内存布局并学习汇编的过程中,我已经在Pi3(ARM)上编写了一个基本的C程序,并使用GDB对其进行了反汇编,但是由于这是我的新手,我需要帮助来理解它.
本质上,我试图理解并发现在程序集中存储变量的位置(BSS,DATA,TEXT内存段),并且还理解并遵循堆栈框架.
我只显示了主要功能-调试屏幕上还有其他部分,所以让我知道它们是否也有帮助!
我了解个别指示的大部分内容,但我想知道的是:
>前三行与堆栈指针有关,这是为主要功能设置堆栈框架吗?
>在x0x10414处,它使用age的值,这是局部变量作为主函数框架的一部分弹出到堆栈上的地方吗?
>在x0x1041c处,是否也将返回值作为帧的一部分推入堆栈?
>函数末尾在哪里冲洗堆栈?
int main () {
int age = 30;
int salary;
return 0;
}
0x10408 push {r11} ; (str r11, [sp, #-4]!)
x0x1040c add r11, sp, #0
x0x10410 sub sp, sp, #12
x0x10414 mov r3, #30
x0x10418 str r3, [r11, #-8]
x0x1041c mov r3, #0
x0x10420 mov r0, r3
x0x10424 add sp, r11, #0
x0x10428 pop {r11} ; (ldr r11, [sp], #4)
x0x1042c bx lr