JPDA 架构研究16 - Agent利用环境指针访问VM(方法访问篇)
2014-12-09 14:43
351 查看
引入:
上文中我们讲解了Agent如何利用环境指针来访问VM的字段访问部分,现在来讲解方法访问部分。
分类11:方法访问
a.GetMethodName. 获取方法名字和签名
b.GetMethodDeclaringClass.获取方法声明的类
c.GetMethodModifiers. 获取方法的访问修饰符
d.GetMaxLocals.获取方法使用的局部变量
e.GetArgumentsSize. 获取方法的入参变量数
f.GetLineNumberTable.获取某给定方法的行号表
g.GetMethodLocation. 获取方法的位置
h.GetLocalVariableTable.获取方法的本地变量列表。
i.GetByteCodes. 获取方法的字节码
j.IsMethodNative.判断某方法是否是native方法
k.IsMethodSynthetic.判断某方法是否是合成方法
l.IsMethodObsolete.判断某方法是否是过时的方法。
剩余还有一些JVMTI的函数,我就略去了。
上文中我们讲解了Agent如何利用环境指针来访问VM的字段访问部分,现在来讲解方法访问部分。
分类11:方法访问
a.GetMethodName. 获取方法名字和签名
jvmtiError GetMethodName(jvmtiEnv* env, jmethodID method, char** name_ptr, char** signature_ptr, char** generic_ptr)
b.GetMethodDeclaringClass.获取方法声明的类
jvmtiError GetMethodDeclaringClass(jvmtiEnv* env, jmethodID method, jclass* declaring_class_ptr)
c.GetMethodModifiers. 获取方法的访问修饰符
jvmtiError GetMethodModifiers(jvmtiEnv* env, jmethodID method, jint* modifiers_ptr)
d.GetMaxLocals.获取方法使用的局部变量
jvmtiError GetMaxLocals(jvmtiEnv* env, jmethodID method, jint* max_ptr)这个数值包含了方法入参中的变量数和方法体内用的局部变量数。
e.GetArgumentsSize. 获取方法的入参变量数
jvmtiError GetArgumentsSize(jvmtiEnv* env, jmethodID method, jint* size_ptr)
f.GetLineNumberTable.获取某给定方法的行号表
typedef struct { jlocation start_location; jint line_number; } jvmtiLineNumberEntry;
jvmtiError GetLineNumberTable(jvmtiEnv* env, jmethodID method, jint* entry_count_ptr, jvmtiLineNumberEntry** table_ptr)这个行号表来自于分析源代码
g.GetMethodLocation. 获取方法的位置
jvmtiError GetMethodLocation(jvmtiEnv* env, jmethodID method, jlocation* start_location_ptr, jlocation* end_location_ptr)
h.GetLocalVariableTable.获取方法的本地变量列表。
typedef struct { jlocation start_location; jint length; char* name; char* signature; char* generic_signature; jint slot; } jvmtiLocalVariableEntry;
jvmtiError GetLocalVariableTable(jvmtiEnv* env, jmethodID method, jint* entry_count_ptr, jvmtiLocalVariableEntry** table_ptr)
i.GetByteCodes. 获取方法的字节码
jvmtiError GetBytecodes(jvmtiEnv* env, jmethodID method, jint* bytecode_count_ptr, unsigned char** bytecodes_ptr)
j.IsMethodNative.判断某方法是否是native方法
jvmtiError IsMethodNative(jvmtiEnv* env, jmethodID method, jboolean* is_native_ptr)
k.IsMethodSynthetic.判断某方法是否是合成方法
jvmtiError IsMethodSynthetic(jvmtiEnv* env, jmethodID method, jboolean* is_synthetic_ptr)所谓合成方法就是不出现在源代码中而是由编辑器创造出来的方法。
l.IsMethodObsolete.判断某方法是否是过时的方法。
jvmtiError IsMethodObsolete(jvmtiEnv* env, jmethodID method, jboolean* is_obsolete_ptr)判断该方法是否使用了一个过期的方法版本。
剩余还有一些JVMTI的函数,我就略去了。
相关文章推荐
- JPDA 架构研究8 - Agent利用环境指针访问VM(堆栈管理篇)
- JPDA 架构研究13 - Agent利用环境指针访问VM(类管理篇)
- JPDA 架构研究9 - Agent利用环境指针访问VM (堆管理篇)
- JPDA 架构研究5 - Agent利用环境指针访问VM (内存管理篇)
- JPDA 架构研究11 - Agent利用环境指针访问VM(断点操作篇)
- JPDA 架构研究15 - Agent利用环境指针访问VM(字段访问篇)
- JPDA 架构研究6 - Agent利用环境指针访问VM (线程管理篇)
- JPDA 架构研究12 - Agent利用环境指针访问VM(观察字段篇)
- JPDA 架构研究10 - Agent利用环境指针访问VM(局部变量管理篇)
- JPDA 架构研究7 - Agent利用环境指针访问VM(线程组管理篇)
- JPDA 架构研究14 - Agent利用环境指针访问VM(对象管理篇)
- spring+hibernate架构中Dao访问数据库的几种方法
- 利用飞信虚拟机,在没有.net环境的机子上运行C#程序(不是打包方法)
- 匿名委托可以访问局部变量,而原始的委托则必须利用别的方法才可以做到
- Windows 网络服务架构系列课程详解(八) --windows域环境多区域间访问
- C语言函数中利用指针引用可变参数的方法
- Delphi开发环境下利用Spcomm控件实现PC机与单片机之间串口通信的方法
- 利用.net开发可扩展的数据访问架构
- 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息
- 一步一步实现企业网络架构之九:利用Win2003 NAT功能配置Internet访问