JVM运行时数据区(JVM Runtime Area)
其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。本文将通过以下几个话题来讨论JVM运行时数据区。
Topic 1. JVM运行时数据区
里有什么?Topic 2.
虚拟机栈 是什么?虚拟机栈
里有什么?Topic 3.
栈帧是什么?栈帧
里有什么?Topic 4. 方法区
是什么?方法区
里有什么?
...
分类:
编程语言 时间:
2014-10-13 17:08:20
阅读次数:
235
函数的调用操作是从一块代码到另一块代码之间的双向数据传递和执行控制。数据传递:函数参数和返回值。CPU的程序实现使用栈来支持函数调用操作。栈用来传递函数参数、存储返回信息、临时保存寄存器原有值以及存储局部数据。单个函数调用操作所使用的栈部分称为栈帧。栈帧结构的两端由两个指针指定。ebp用作栈帧的指针...
分类:
其他好文 时间:
2014-10-12 10:28:37
阅读次数:
186
Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的...
分类:
编程语言 时间:
2014-10-09 16:21:48
阅读次数:
304
这里可以简单的修改任意函数的返回地址,可以做到自定义EIP的指向,即可执行当前进程空间的任意指令,这里只是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取任意进程内存,修改任意进程函数执行流程等方法。
废话不多说了,直接上菜:
#include
#include
/*
打印 main函数的返回地址的值(用途,你懂得!)...
分类:
其他好文 时间:
2014-09-29 00:19:47
阅读次数:
246
当我们的程序core掉之后,如果能获取到core时的函数调用堆栈将非常有利于定位问题。在Windows下可以使用SEH机制;在Linux下通过gdb使用coredump文件即可。
但有时候由于某些错误导致堆栈被破坏,发生拿不到调用堆栈的情况。
一些基础预备知识本文不再详述,可以参考以下文章:
函数调用栈的获取原理分析寄存器、函数调用与栈帧
需要知道的信息:
函数调用对应的call...
分类:
编程语言 时间:
2014-09-14 18:09:07
阅读次数:
261
Python调试不如强类型的语言方便,显示调用栈有时非常必要,inspect模块很好用import inspectinspect.stack()inspect.stack()返回的是一个函数栈帧列表如(已经做了一个for e in inspect(): print e 转化)(, '/usr/lib...
分类:
编程语言 时间:
2014-08-20 01:16:05
阅读次数:
267
【原文】 函数调用另一个词语表示叫作过程。一个函数调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为函数的局部变量分配空间,并在退出时释放这些空间。而数据传递,局部变量的分配和释放是通过操纵程序栈来实现的。 我们先来了解一个概念,栈帧。机器用栈来传递过程参数,存储返回信息.....
分类:
其他好文 时间:
2014-08-14 16:23:18
阅读次数:
189
简单讲一下各个区域
程序计数器:当前线程所执行的字节码的行号指示器,循环,线程恢复等基础功能依赖这个计数器完成(线程私有,每一个线程都会有自己单独的一个计数器)。
本地方法栈:与java虚拟机栈相似,不过执行的是native方法。
方法区(包含运行时常量池):各个线程共享的区域,它用于已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
java虚拟机栈:也是线程私有的,生命周期与线程相同 每个方法执行时都会创建一个栈帧(一会儿会详细讲到)结构是栈结构,先进后...
分类:
编程语言 时间:
2014-08-11 17:54:52
阅读次数:
315
程序的OEP,一开始以 push ebp 和mov ebp esp这两句开始。原因:c程序的开始是以一个主函数main()为开始的,而函数在访问的过程中最重要的事情就是要确保堆栈的平衡,而在win32的环境下保持平衡的办法是这样的:1.让EBP保存ESP的值。2.在程序运行完毕的时候调用mov es...
分类:
其他好文 时间:
2014-08-10 17:59:00
阅读次数:
269