本节通过反汇编可执行文件得到的文件,研究函数栈帧的相关内容;...
分类:
其他好文 时间:
2015-04-05 23:35:38
阅读次数:
290
Java虚拟机运行时数据区
运行时数据区主要包括:方法区、堆、虚拟机栈、本地方法栈、程序计数器。
其中方法区和栈是线程共享的区域,另外三块区域是每个线程私有的区域。各个数据区的功能简单说明如下:
程序计数器:当前线程所执行的字节码的行号指示器。
虚拟机栈:描述Java方法执行的内存模型——每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法...
分类:
编程语言 时间:
2015-03-13 22:24:59
阅读次数:
223
运行时数据区域:
线程私有:
1.程序计数器
如果正在执行的方法为Native方法,程序计数器值为空。
2.java虚拟机栈
虚拟机栈描述java方法执行的内存模型:每个方法被执行时会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口。从方法的调...
分类:
编程语言 时间:
2015-03-09 17:40:15
阅读次数:
151
Linux进程的栈和进程中函数的栈帧
主要理解了Linux进程的栈和函数的栈帧的区别和联系...
分类:
系统相关 时间:
2015-03-05 23:46:29
阅读次数:
273
可达性分析算法
来判断对象是否存活。这个算法的基本思路是通多一系列的称为“gc roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到gc roots没有任何引用链项连时(图论来说,从gc到这个对象不可达),则证明此对象是不可用的。
JAVA语言中,可作为gc roots的对象包括下面几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象。
方法区中类静态属性...
分类:
其他好文 时间:
2015-02-09 12:57:44
阅读次数:
138
调试64bit程序所面临的挑战
如果到目前为止,你还没有调试过优化后的64bit代码,为了不落后于时代,那就赶紧去尝试吧。由于64bit下fastcall调用方式和大量通用寄存器的存在,找出任意栈帧中局部变量的值将会变得非常棘手。
本文,我将详述一些我非常喜欢的调试64bit代码的技巧。但在此之前,我们先对64bit下函数的调用方式做一个了解。
X64调用约定
如果你熟悉32位平台下的fa...
分类:
其他好文 时间:
2015-01-31 20:40:15
阅读次数:
161
1、首先了解一下堆栈帧的创建步骤(来自《32位汇编语言程序设计》王艳平一书):
1)主程序把传递的参数压入堆栈;
2)调用子程序时,返回地址压入堆栈;
3)子程序中,EBP压入堆栈;设置EBP等于ESP,通过EBP访问参数和局部变量;
4)子程序有局部变量,ESP减去一个数值,在堆栈预留局部变量使用的空间;
5)子程序要保护的寄存器...
分类:
其他好文 时间:
2015-01-27 15:04:49
阅读次数:
155
以下摘自《IDA Pro》,貌似有一些细节之处没有交代清楚呢,需要进一步思考、实践。 了解栈帧的基本概念后,接下来详细介绍它们的结构。下面的例子涉及x86体系结构和与常见的x86编译器(如Microsoft Visual C/C++或GNU的gcc/g++)有关的行为。创建栈帧的最重要的步骤是,通过...
分类:
其他好文 时间:
2015-01-25 23:56:05
阅读次数:
423
(一)java内存区域概况
jvm运行java程序时把所管理的内存分成几个部分:方法区、java栈、本地方法栈、java堆、pc程序计数器。
class字节码装载解析后,在多线程环境中,方法区和java堆数据共享,每个线程自带pc程序计数器和java栈,栈帧中包含方法的所有状态(局部变量、传参、返回值、运算中间结果等)。对共享数据需要考虑多线程并发问题。
更详细内容可参考《深入理解JVM虚拟...
分类:
编程语言 时间:
2015-01-20 10:34:31
阅读次数:
222
函数的工作借助于栈。
栈在内存中是一块特殊的存储空间,它的存储原则是“先进后出”,最先被存储的数据最后被释放。
esp被称为栈顶指针,ebp称为栈底指针,通过这两个指针寄存器保存当前栈的起始地址与结束地址。
esp与ebp之间所构成的空间便成为栈帧。通常,在VC++中,栈帧中可以寻址的数据有局部变量、函数返回地址、函数参数等。不同的两次函数调用,所形成的栈帧也不同。当由一个函数进入到...
分类:
其他好文 时间:
2015-01-09 15:34:44
阅读次数:
258