C main的反汇编简单介绍

本文详细解析了一段在Linux环境下编译的C程序,在反汇编后所生成的ARM指令集,深入探讨了`push{fp}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux下写了个简单的C程序,如下:
  1 #include<stdio.h>
  2 int main()
  3 {
  4     int a;
  5     a++;
  6     return a;
  7 }

用arm-linux-gcc -g test.c -o test 得到test可执行文件,然后进行反汇编:arm-linux-objdump -D -S test  >dump ,进入dump中查看反汇编。

进入dump后,跳转到main函数的执行指令处,如下所示:

175 0000834c <main>:
176 #include<stdio.h>
177 int main()
178 {
179     834c:   e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
180     8350:   e28db000    add fp, sp, #0  ; 0x0
181     8354:   e24dd00c    sub sp, sp, #12 ; 0xc
182     int a;
183     a++;
184     8358:   e51b3008    ldr r3, [fp, #-8]
185     835c:   e2833001    add r3, r3, #1  ; 0x1
186     8360:   e50b3008    str r3, [fp, #-8]
187     return a;
188     8364:   e51b3008    ldr r3, [fp, #-8]
189 }
190     8368:   e1a00003    mov r0, r3
191     836c:   e28bd000    add sp, fp, #0  ; 0x0
192     8370:   e8bd0800    pop {fp}
193     8374:   e12fff1e    bx  lr

179处,执行push {fp} 指令,此处指令有两个作用:一是将当前fp的内容存储在[sp-4]的地址中;二是使 sp = sp-4 ,即改变了sp的值。

180:等于:fp = sp ,改变fp的值,使fp指向了新的栈底

181:等于:sp = sp -12 ,使sp指向栈底后的第三个单元区域。


未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值