Part10-C语言环境初始化-栈初始化lesson1
1、概念解析
ARM系统使用的是满栈!
ARM采用降栈!!!
栈帧
每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧。那么所有栈帧组成了整个栈。
子函数func里面保存了main函数的上边界FP和下边界SP。
2、栈的作用
保存局部变量
代码样例
编译之:
arm-linux-gcc -g stack1.c -o stack1
反汇编之:arm-linux-objdump -D -S stack1 >dump
dump里面的结果
首先是push {sp},具体是将str fp,[sp,#-4]!,里面让sp先减4再存。加一个!号,表示使sp-4,但不会对sp本身有影响
add fp,sp,#0把sp加0的值赋值给fp,实际就是把sp赋给fp,让fp也指向栈顶,
sub sp,sp,#12
执行c语言的a++,它是ldr r3,[fp,#-8],从这个地址的内容拿到r3,该地址的内容实际上就是a的值,然后再add r3,r3,#1,加1后再存回原来的地方。
传递参数
在c语言传递参数的过程当中,如果参数的个数小于或等于4的就用r0到r3,如果大于的话就要用栈来传递
保存寄存器的值
3、栈初始化编程
就是对sp指针进行赋值,
6410内存256MB内存位置0x20000000+64MB
210内存512MB内存位置0x50000000+64MB(0x4000000)
2440内存64MB,内存位置0x30000000+64MB
那么我们把sp指针统一指到内存的64MB处(它是向下自减的)
Part10-C语言环境初始化-栈初始化lesson1的更多相关文章
- c语言环境初始化&c语言和汇编混合编程
bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启 ...
- Android app内语言环境切换
逻辑很简单: 1 app内所有activity继承自BaseActivity或BaseActivity派生出来的子类,BaseActivity中维护了一个静态的 app Activity访问栈,在创 ...
- Go语言goroutine调度器初始化(12)
本文是<Go语言调度器源代码情景分析>系列的第12篇,也是第二章的第2小节. 本章将以下面这个简单的Hello World程序为例,通过跟踪其从启动到退出这一完整的运行流程来分析Go语言调 ...
- Kali Linux渗透测试实战 1.2 环境安装及初始化
1.2 环境安装及初始化 目录(?)[-] 环境安装及初始化 下载映像 安装虚拟机 安装Kali Linux 安装中文输入法 安装VirtualBox增强工具 配置共享目录和剪贴板 运行 Metasp ...
- c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)
/* c++描述将2进制数转化成10进制数 问题,1.初始化栈后,用new,不知道delete是否要再写一个函数释放内存, 还是在哪里可以加上delete 2.如果栈满了,我要分配多点空间,我想的办法 ...
- Linux内核--网络栈实现分析(一)--网络栈初始化
本文分析基于内核Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7488828 更多请看专栏, ...
- Linux内核--网络栈实现分析(一)--网络栈初始化--转
转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...
- C语言标记化结构初始化语法
C语言标记化结构初始化语法 (designated initializer),而且还是一个ISO标准. #include <stdio.h> #include <stdlib.h&g ...
- Swift5 语言指南(十六) 初始化
初始化是准备要使用的类,结构或枚举的实例的过程.此过程涉及为该实例上的每个存储属性设置初始值,并执行在新实例准备好使用之前所需的任何其他设置或初始化. 您可以通过定义实现这个初始化过程初始化,这就像特 ...
随机推荐
- 洛谷 P1561 [USACO12JAN]爬山Mountain Climbing
传送门 题目大意: n头牛,上山时间为u(i),下山为d(i). 要求每一时刻最多只有一头牛上山,一头牛下山. 问每头牛都上下山后花费最少时间. 题解:贪心 推了推样例,发现上山时间一定,那找个下山最 ...
- alpine docker 镜像 时区问题
1. 时区处理 RUN apk update && apk add curl bash tree tzdata \ && cp -r -f /usr/share/zon ...
- vscode使用Markdown文档编写
首先安装vscode工具,具体的使用可以参考之前的博文:<Visual Studio Code教程:基础使用和自定义设置> VScode已经默认集成markdown文档编辑插件.可以新建一 ...
- (转)Android代码混淆-添加了Gson遇到的问题
折腾了好久.....郁闷 -_- 1.首先,project.properties里的配置文件变了,之前的项目一直都是在project.properties这个文件中添加一行proguard.confi ...
- spring的@Transactional注解详细用法(转)
概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...
- FPGA论剑
今天走在街上,听到了久违的<光辉岁月>,想起6月30号那天,街边所有的餐厅.小店都在播放beyond的经典之作,那天是香港殿堂级乐队beyond乐队主唱兼吉他手黄家驹先生的忌日.黄家驹先生 ...
- Java-Maven-Runoob:Maven构建生命周期
ylbtech-Java-Maven-Runoob:Maven构建生命周期 1.返回顶部 1. Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程. 一个典型的 Mave ...
- Py修行路 python基础 (二十五)线程与进程
操作系统是用户和硬件沟通的桥梁 操作系统,位于底层硬件与应用软件之间的一层 工作方式:向下管理硬件,向上提供接口 操作系统进行切换操作: 把CPU的使用权切换给不同的进程. 1.出现IO操作 2.固定 ...
- 第十七章 MySQL Replication(待续)
··········
- 四道腾讯的javascript面试题
今天整理自己的文件夹时,发现了曾经面试腾讯实习生时的被问挂了的面试题,我将它们整理好了供大家借鉴.当时要求的是手写代码.汗啊,我那时弱爆了! 1,将给定数组转换为一个随机数组 Array.protot ...