c语言 函数 栈 gdb,了解GDB基本C程序中的asm指令

在尝试理解过程中的内存布局并学习汇编的过程中,我已经在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值