针对main函数的运行时stack的分析

针对main函数的运行时stack的分析

这里需要特殊说明的是运行环境是64-bits的Ubuntu.编译器是gcc

测试用代码:

int main(int argc,char* argv[])
{
	int array[10];

	array[0] = 10;
	array[9] = 9; 

	return 0;
}

利用GDB调试这段代码。我们来观察分析main函数的栈

分析&argc 和&argv可以知道当前main函数栈的使用情况

64bits 的机器。指针长度是64bits,即8byte.

由于字节对其的缘故,这里stack的运行时状态是这样的

提示: 如果%rbp 被破坏,那么将导致call main无法返回,接着core dump

这篇blog意在为后面的CSAPP lab0做铺垫~

http://blog.csdn.net/cinmyheart/article/details/39138915

时间: 2024-07-30 10:30:17

针对main函数的运行时stack的分析的相关文章

Linux运行时I/O设备的电源管理框架【转】

转自:https://www.cnblogs.com/coryxie/archive/2013/03/01/2951243.html 本文介绍Linux运行时I/O设备的电源管理框架.属于Linux内核文档的翻译. 原文:http://www.kernel.org/doc/Documentation/power/runtime_pm.txt 翻译:CoryXie <[email protected]> 1. 介绍 对I/O设备的运行时电源管理(运行时PM)的支持,是在电源管理的核心(PM co

C语言中main函数的参数详解

main函数的定义形式  main函数可以不带参数,也可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv.所以C99标准中规定只有以下两种定义方式是正确的: int main(void) //无参形式 int main(int argc, char *argv[]) //有参形式 当然有参形式可以进行演变,所以下面的写法也是正确的(同时变量名是可以更换的): int main(int argc, char **a

运行时c函数

// 修改isa,本质就是改变当前对象的类名    object_setClass(self, [XMGKVONotifying_Person class]); // self动态添加关联    // id object:给哪个对象添加关联属性    // key:属性名    // value:关联值    //objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy

C/C++运行期启动代码调用main函数

只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成为原型链 老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程序的代码不用改来改去,只需要把扩展的程序集放到对应的目录下就可以了. 带着这种想法,当用户请求应用程序的这些源文件时,应以将会动态的加载这些捆绑.由于

Android运行时ART执行类方法的过程分析

在前面一篇文章中,我们分析了ART运行时加载类以及查找其方法的过程.一旦找到了目标类方法,我们就可以获得它的DEX字节码或者本地机器指令,这样就可以对它进行执行了.在ART运行时中,类方法的执行方式有两种.一种是像Dalvik虚拟机一样,将其DEX字节码交给解释器执行:另一种则是直接将其本地机器指令交给CPU执行.在本文中,我们就将通过分析ART运行时执行类方法的过程来理解ART运行时的运行原理. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 我们先来看

ART运行时Java堆创建过程分析

与Dalvik虚拟机一样,ART运行时内部也有一个Java堆,用来分配Java对象.当这些Java对象不再被使用时,ART运行时需要回收它们占用的内存.在前面一文中,我们简要介绍了ART运行时的垃圾收集机制,从中了解到ART运行时内部使用的Java堆是由四种Space以及各种辅助数据结构共同描述的.为了后面可以更好地分析ART运行时的垃圾收集机制,本文就对它内部使用的Java堆的创建过程进行分析. 本博参加博客之星评选,求投票:点击投票 老罗的新浪微博:http://weibo.com/shen

ART运行时Compacting GC为新创建对象分配内存的过程分析

在引进Compacting GC后,ART运行时优化了堆内存分配过程.最显著特点是为每个ART运行时线程增加局部分配缓冲区(Thead Local Allocation Buffer)和在OOM前进行一次同构空间压缩(Homogeneous Space Compact).前者可提高堆内存分配效率,后者可解决内存碎片问题.本文就对ART运行时引进Compacting GC后的堆内存分配过程进行分析. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从接口层面

ART运行时Semi-Space(SS)和Generational Semi-Space(GSS)GC执行过程分析

Semi-Space(SS)GC和Generational Semi-Space(GSS)GC是ART运行时引进的两个Compacting GC.它们的共同特点是都具有一个From Space和一个To Space.在GC执行期间,在From Space分配的还存活的对象会被依次拷贝到To Space中,这样就可以达到消除内存碎片的目的.本文就将SS GC和GSS GC的执行过程分析进行详细分析. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 与SS G

Unity3D脚本学习——运行时类

AssetBundle 类,继承自Object.AssetBundles让你通过WWW类流式加载额外的资源并在运行时实例化它们.AssetBundles通过BuildPipeline.BuildAssetBundle创建. 参见:WWW.assetBundle ,Loading Resources at Runtime ,BuildPipeline.BuildPlayer function Start () { var www = new WWW ("http://myserver/myBund