⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jvmdi.h

📁 usbio Ver 2.40 source code!!! 做USB开发的值得
💻 H
📖 第 1 页 / 共 3 页
字号:
    typedef struct { 
        jthread thread;
        jclass clazz;
        jmethodID method;
        jlocation location;
        jobject exception;
    } JVMDI_exception_catch_event_data;
    
    /* kind = JVMDI_EVENT_USER_DEFINED */
    typedef struct { 
        jobject object;
        jint key;
    } JVMDI_user_event_data;
    
    /* kind = JVMDI_EVENT_THREAD_END or */
    /* JVMDI_EVENT_THREAD_START */
    typedef struct { 
        jthread thread;
    } JVMDI_thread_change_event_data;
    
    /* kind = JVMDI_EVENT_CLASS_LOAD, */
    /* JVMDI_EVENT_CLASS_UNLOAD, or */
    /* JVMDI_EVENT_CLASS_PREPARE */
    typedef struct { 
        jthread thread;
        jclass clazz;
    } JVMDI_class_event_data;
    
/* This stucture passes information about the event.
 * location is the index of the last instruction executed. 
 */
typedef struct {
    jint kind;		/* the discriminant */

    union {
	/* kind = JVMDI_EVENT_SINGLE_STEP */
        JVMDI_single_step_event_data single_step;
			
        /* kind = JVMDI_EVENT_BREAKPOINT */
        JVMDI_breakpoint_event_data breakpoint;

        /* kind = JVMDI_EVENT_FRAME_POP */
        /* kind = JVMDI_EVENT_METHOD_ENTRY */
        /* kind = JVMDI_EVENT_METHOD_EXIT */
        JVMDI_frame_event_data frame;

        /* kind = JVMDI_EVENT_FIELD_ACCESS */
        JVMDI_field_access_event_data field_access;

        /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
        JVMDI_field_modification_event_data field_modification;

        /* kind = JVMDI_EVENT_EXCEPTION */
        JVMDI_exception_event_data exception;

        /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
        JVMDI_exception_catch_event_data exception_catch;

        /* kind = JVMDI_EVENT_USER_DEFINED */
        JVMDI_user_event_data user;
			
        /* kind = JVMDI_EVENT_THREAD_END or */
        /* JVMDI_EVENT_THREAD_START */
        JVMDI_thread_change_event_data thread_change;
			
        /* kind = JVMDI_EVENT_CLASS_LOAD, */
        /* JVMDI_EVENT_CLASS_UNLOAD, or */
        /* JVMDI_EVENT_CLASS_PREPARE */
        JVMDI_class_event_data class_event;
			
        /* kind = JVMDI_EVENT_VM_DEATH, JVMDI_EVENT_VM_INIT */
        /* no additional fields */		
    } u;
} JVMDI_Event;

	/*** event kinds ***/
#define JVMDI_EVENT_SINGLE_STEP   ((jint)1)
#define JVMDI_EVENT_BREAKPOINT    ((jint)2)
#define JVMDI_EVENT_FRAME_POP     ((jint)3)
#define JVMDI_EVENT_EXCEPTION     ((jint)4)
#define JVMDI_EVENT_USER_DEFINED  ((jint)5)
#define JVMDI_EVENT_THREAD_START  ((jint)6)
#define JVMDI_EVENT_THREAD_END    ((jint)7)
#define JVMDI_EVENT_CLASS_PREPARE ((jint)8)
#define JVMDI_EVENT_CLASS_UNLOAD  ((jint)9)
#define JVMDI_EVENT_CLASS_LOAD    ((jint)10)
#define JVMDI_EVENT_FIELD_ACCESS       ((jint)20)
#define JVMDI_EVENT_FIELD_MODIFICATION ((jint)21)
#define JVMDI_EVENT_EXCEPTION_CATCH    ((jint)30)
#define JVMDI_EVENT_METHOD_ENTRY       ((jint)40)
#define JVMDI_EVENT_METHOD_EXIT        ((jint)41)
#define JVMDI_EVENT_VM_INIT            ((jint)90)
#define JVMDI_EVENT_VM_DEATH           ((jint)99)

#define JVMDI_MAX_EVENT_TYPE_VAL       ((jint)99)



/* event handler hook */
typedef void (*JVMDI_EventHook)(JNIEnv *env, JVMDI_Event *event);

typedef jvmdiError (*JVMDI_AllocHook) (jlong size, jbyte** memPtr);
typedef jvmdiError (*JVMDI_DeallocHook) (jbyte* buffer);

/*
 * Class states used in JVMDI_GetClassStatus
 */
#define JVMDI_CLASS_STATUS_VERIFIED          ((jint)0x01)
#define JVMDI_CLASS_STATUS_PREPARED          ((jint)0x02)
#define JVMDI_CLASS_STATUS_INITIALIZED       ((jint)0x04)
 /* Error prevents initialization */
#define JVMDI_CLASS_STATUS_ERROR             ((jint)0x08) 

/* structure for returning line number information 
 */
typedef struct {
    jlocation start_location;
    jint line_number;
} JVMDI_line_number_entry;


/* structure for returning local variable information 
 */
typedef struct {
    jlocation start_location;   /* variable valid start_location */
    jint length;                /* upto start_location+length */ 
    char *name;                 /* name in UTF8 */
    char *signature;            /* type signature in UTF8 */
    jint slot;                  /* variable slot, see JVMDI_GetLocal*()  */
} JVMDI_local_variable_entry;

/* structure for returning exception handler information 
 */
typedef struct {
    jlocation start_location;
    jlocation end_location;
    jlocation handler_location;
    jclass exception;           /* if null, all exceptions */
} JVMDI_exception_handler_entry;

#define JVMDI_OPERAND_TYPE_REFERENCE      ((jint)1)
#define JVMDI_OPERAND_TYPE_INT            ((jint)2)
#define JVMDI_OPERAND_TYPE_FLOAT          ((jint)3)
#define JVMDI_OPERAND_TYPE_LONG0          ((jint)4) /* least sig. 32 bits */
#define JVMDI_OPERAND_TYPE_LONG1          ((jint)5) /* most sig. 32 bits */
#define JVMDI_OPERAND_TYPE_DOUBLE0        ((jint)6) /* least sig. 32 bits */
#define JVMDI_OPERAND_TYPE_DOUBLE1        ((jint)7) /* most sig. 32 bits */
#define JVMDI_OPERAND_TYPE_RETURN_ADDRESS ((jint)8)

typedef struct {
    jint word;                 /* 32 bit operand stack quantities */
    jint type;                 /* type encoding of the operand word */
                               /* one of JVMDI_OPERAND_TYPE_* */
} JVMDI_operand_stack_element;

typedef struct { 
    jint instance_field_count; /* number of instance fields referencing obj */
    struct JVMDI_instance_field {
        jobject instance;      /* instance referencing obj */
        jfieldID field;        /* field holding reference */
    } *instance_fields;        /* instanceField_count of them */
     
    jint static_field_count;   /* number of static fields referencing obj */
    struct JVMDI_static_field {
        jclass clazz;          /* class referencing obj */
        jfieldID static_field; /* field holding reference */
    } *static_fields;          /* static_field_count of them */
    
    jint array_element_count;  /* number of array elements referencing obj */
    struct JVMDI_array_element {
        jobjectArray array;    /* array referencing obj */
        jint index;            /* index holding reference */
    } *array_elements;         /* array_element_count of them */
    
    jint frame_slot_count;     /* number of frame slots referencing obj */
    struct JVMDI_frame_slot {
        jthread thread;        /* thread of the frame */
        jframeID frame;        /* frame referencing obj */
        jint slot;             /* slot holding reference */
    } *frame_slots;            /* frame_slot_count of them */
} JVMDI_object_reference_info;

/* structure for defining a class
*/
typedef struct {
    jclass clazz;              /* Class object for this class */
    jint class_byte_count;     /* number of bytes defining class (below) */
    jbyte *class_bytes;        /* bytes defining class (in JVM spec */
                               /* Class File Format) */
} JVMDI_class_definition;

  /* For backwards compatibility */
#define can_change_schema can_unrestrictedly_redefine_classes

typedef struct {
    unsigned int can_watch_field_modification      : 1;
    unsigned int can_watch_field_access            : 1;
    unsigned int can_get_bytecodes                 : 1;
    unsigned int can_get_synthetic_attribute       : 1;
    unsigned int can_get_owned_monitor_info        : 1;
    unsigned int can_get_current_contended_monitor : 1;
    unsigned int can_get_monitor_info              : 1;
    unsigned int can_get_heap_info                 : 1;
    unsigned int can_get_operand_stack             : 1;
    unsigned int can_set_operand_stack             : 1;
    unsigned int can_pop_frame                     : 1;
    unsigned int can_get_class_definition          : 1;
    unsigned int can_redefine_classes              : 1; 
    unsigned int can_add_method                    : 1;
    unsigned int can_unrestrictedly_redefine_classes : 1;
    unsigned int can_suspend_resume_thread_lists   : 1;
} JVMDI_capabilities;

typedef struct JVMDI_Interface_1_ {
    jvmdiError (JNICALL *SetEventHook)
      (JVMDI_EventHook hook);
    jvmdiError (JNICALL *SetEventNotificationMode)
      (jint mode, jint eventType, jthread thread, ...);

    jvmdiError (JNICALL *GetThreadStatus)
      (jthread thread,
       jint *threadStatusPtr, jint *suspendStatusPtr);
    jvmdiError (JNICALL *GetAllThreads)
      (jint *threadsCountPtr, jthread **threadsPtr);
    jvmdiError (JNICALL *SuspendThread)
      (jthread thread); 
    jvmdiError (JNICALL *ResumeThread)
      (jthread thread);
    jvmdiError (JNICALL *StopThread)
      (jthread thread, jobject exception);
    jvmdiError (JNICALL *InterruptThread)
      (jthread thread);
    jvmdiError (JNICALL *GetThreadInfo)
      (jthread thread, JVMDI_thread_info *infoPtr);
    jvmdiError (JNICALL *GetOwnedMonitorInfo)
      (jthread thread, JVMDI_owned_monitor_info *infoPtr);
    jvmdiError (JNICALL *GetCurrentContendedMonitor)
      (jthread thread, jobject *monitor);
    jvmdiError (JNICALL *RunDebugThread)
      (jthread thread, JVMDI_StartFunction proc, void *arg,
       int priority);

    jvmdiError (JNICALL *GetTopThreadGroups)
      (jint *groupCountPtr, jthreadGroup **groupsPtr);
    jvmdiError (JNICALL *GetThreadGroupInfo)
      (jthreadGroup group, JVMDI_thread_group_info *infoPtr);
    jvmdiError (JNICALL *GetThreadGroupChildren)
      (jthreadGroup group, 
       jint *threadCountPtr, jthread **threadsPtr,
       jint *groupCountPtr, jthreadGroup **groupsPtr);

    jvmdiError (JNICALL *GetFrameCount)
      (jthread thread, jint *countPtr);
    jvmdiError (JNICALL *GetCurrentFrame)
      (jthread thread, jframeID *framePtr);
    jvmdiError (JNICALL *GetCallerFrame)
      (jframeID called, jframeID *framePtr);
    jvmdiError (JNICALL *GetFrameLocation)
      (jframeID frame, jclass *classPtr, jmethodID *methodPtr,
       jlocation *locationPtr);
    jvmdiError (JNICALL *NotifyFramePop)
      (jframeID frame); 
    jvmdiError (JNICALL *GetLocalObject)
      (jframeID frame, jint slot, jobject *valuePtr);
    jvmdiError (JNICALL *GetLocalInt)
      (jframeID frame, jint slot, jint *valuePtr);
    jvmdiError (JNICALL *GetLocalLong)
      (jframeID frame, jint slot, jlong *valuePtr);
    jvmdiError (JNICALL *GetLocalFloat)
      (jframeID frame, jint slot, jfloat *valuePtr);
    jvmdiError (JNICALL *GetLocalDouble)
      (jframeID frame, jint slot, jdouble *valuePtr);
    jvmdiError (JNICALL *SetLocalObject)
      (jframeID frame, jint slot, jobject value);
    jvmdiError (JNICALL *SetLocalInt)
      (jframeID frame, jint slot, jint value);
    jvmdiError (JNICALL *SetLocalLong)
      (jframeID frame, jint slot, jlong value);
    jvmdiError (JNICALL *SetLocalFloat)
      (jframeID frame, jint slot, jfloat value);
    jvmdiError (JNICALL *SetLocalDouble)
      (jframeID frame, jint slot, jdouble value);

    jvmdiError (JNICALL *CreateRawMonitor)
      (char *name, JVMDI_RawMonitor *monitorPtr);
    jvmdiError (JNICALL *DestroyRawMonitor)
      (JVMDI_RawMonitor monitor);
    jvmdiError (JNICALL *RawMonitorEnter)
      (JVMDI_RawMonitor monitor);
    jvmdiError (JNICALL *RawMonitorExit)
      (JVMDI_RawMonitor monitor);
    jvmdiError (JNICALL *RawMonitorWait)
      (JVMDI_RawMonitor monitor, jlong millis);
    jvmdiError (JNICALL *RawMonitorNotify)
      (JVMDI_RawMonitor monitor);
    jvmdiError (JNICALL *RawMonitorNotifyAll)
      (JVMDI_RawMonitor monitor);

    jvmdiError (JNICALL *SetBreakpoint)
      (jclass clazz, jmethodID method, jlocation location);
    jvmdiError (JNICALL *ClearBreakpoint)
      (jclass clazz, jmethodID method, jlocation location);
    jvmdiError (JNICALL *ClearAllBreakpoints)
      ();

    jvmdiError (JNICALL *SetFieldAccessWatch)
      (jclass clazz, jfieldID field);
    jvmdiError (JNICALL *ClearFieldAccessWatch)
      (jclass clazz, jfieldID field);
    jvmdiError (JNICALL *SetFieldModificationWatch)
      (jclass clazz, jfieldID field);
    jvmdiError (JNICALL *ClearFieldModificationWatch)
      (jclass clazz, jfieldID field);

    jvmdiError (JNICALL *SetAllocationHooks)
      (JVMDI_AllocHook ahook, JVMDI_DeallocHook dhook);
    jvmdiError (JNICALL *Allocate)
      (jlong size, jbyte** memPtr);
    jvmdiError (JNICALL *Deallocate)
      (jbyte* mem);

    jvmdiError (JNICALL *GetClassSignature)
      (jclass clazz, char **sigPtr);
    jvmdiError (JNICALL *GetClassStatus)
      (jclass clazz, jint *statusPtr);
    jvmdiError (JNICALL *GetSourceFileName)
      (jclass clazz, char **sourceNamePtr);
    jvmdiError (JNICALL *GetClassModifiers)
      (jclass clazz, jint *modifiersPtr);
    jvmdiError (JNICALL *GetClassMethods)
      (jclass clazz, jint *methodCountPtr, jmethodID **methodsPtr);
    jvmdiError (JNICALL *GetClassFields)
       (jclass clazz, jint *fieldCountPtr, jfieldID **fieldsPtr);
    jvmdiError (JNICALL *GetImplementedInterfaces)
      (jclass clazz, jint *interfaceCountPtr, jclass **interfacesPtr);
    jvmdiError (JNICALL *IsInterface)
      (jclass clazz, jboolean *isInterfacePtr);
    jvmdiError (JNICALL *IsArrayClass)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -