This commit is contained in:
943
cpp/nativecall/Release/IntCall.asm
Normal file
943
cpp/nativecall/Release/IntCall.asm
Normal file
@@ -0,0 +1,943 @@
|
||||
TITLE C:\Documents and Settings\Administrator\My Documents\Software\NativeCall\src\cpp\IntCall.cpp
|
||||
.386P
|
||||
include listing.inc
|
||||
if @Version gt 510
|
||||
.model FLAT
|
||||
else
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
|
||||
CONST ENDS
|
||||
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
|
||||
_BSS ENDS
|
||||
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
|
||||
_TLS ENDS
|
||||
; COMDAT ??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ?FindClass@JNIEnv_@@QAEPAV_jclass@@PBD@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?ThrowNew@JNIEnv_@@QAEJPAV_jclass@@PBD@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?IsInstanceOf@JNIEnv_@@QAEEPAV_jobject@@PAV_jclass@@@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetObjectField@JNIEnv_@@QAEPAV_jobject@@PAV2@PAU_jfieldID@@@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetIntField@JNIEnv_@@QAEJPAV_jobject@@PAU_jfieldID@@@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?SetObjectField@JNIEnv_@@QAEXPAV_jobject@@PAU_jfieldID@@0@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?SetIntField@JNIEnv_@@QAEXPAV_jobject@@PAU_jfieldID@@J@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetArrayLength@JNIEnv_@@QAEJPAV_jarray@@@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetObjectArrayElement@JNIEnv_@@QAEPAV_jobject@@PAV_jobjectArray@@J@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetPrimitiveArrayCritical@JNIEnv_@@QAEPAXPAV_jarray@@PAE@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?ReleasePrimitiveArrayCritical@JNIEnv_@@QAEXPAV_jarray@@PAXJ@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
FLAT GROUP _DATA, CONST, _BSS
|
||||
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
|
||||
endif
|
||||
PUBLIC _Java_com_eaio_nativecall_IntCall_executeCall@8
|
||||
EXTRN ?fieldFunctionHandle@@3PAU_jfieldID@@A:DWORD ; fieldFunctionHandle
|
||||
EXTRN ?fieldLastErrorCode@@3PAU_jfieldID@@A:DWORD ; fieldLastErrorCode
|
||||
EXTRN __imp__GetLastError@0:NEAR
|
||||
_TEXT SEGMENT
|
||||
_env$ = 8
|
||||
_obj$ = 12
|
||||
_functionHandle$ = 8
|
||||
_outVal$ = -4
|
||||
_Java_com_eaio_nativecall_IntCall_executeCall@8 PROC NEAR
|
||||
|
||||
; 79 : (JNIEnv *env, jobject obj) {
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ecx
|
||||
|
||||
; 80 :
|
||||
; 81 : jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
|
||||
mov eax, DWORD PTR ?fieldFunctionHandle@@3PAU_jfieldID@@A ; fieldFunctionHandle
|
||||
push esi
|
||||
mov esi, DWORD PTR _env$[ebp]
|
||||
push eax
|
||||
push DWORD PTR _obj$[ebp]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push esi
|
||||
call DWORD PTR [ecx+400]
|
||||
mov DWORD PTR _functionHandle$[ebp], eax
|
||||
|
||||
; 82 : jint outVal;
|
||||
; 83 :
|
||||
; 84 : #ifdef _WINDOWS
|
||||
; 85 : #ifdef _X86_
|
||||
; 86 :
|
||||
; 87 : __asm {
|
||||
; 88 :
|
||||
; 89 : call functionHandle
|
||||
|
||||
call DWORD PTR _functionHandle$[ebp]
|
||||
|
||||
; 90 : mov outVal, eax
|
||||
|
||||
mov DWORD PTR _outVal$[ebp], eax
|
||||
|
||||
; 91 :
|
||||
; 92 : }
|
||||
; 93 :
|
||||
; 94 : #endif
|
||||
; 95 : #endif
|
||||
; 96 :
|
||||
; 97 : env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
|
||||
call DWORD PTR __imp__GetLastError@0
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push DWORD PTR ?fieldLastErrorCode@@3PAU_jfieldID@@A ; fieldLastErrorCode
|
||||
push DWORD PTR _obj$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [ecx+436]
|
||||
|
||||
; 98 :
|
||||
; 99 : return outVal;
|
||||
|
||||
mov eax, DWORD PTR _outVal$[ebp]
|
||||
|
||||
; 100 :
|
||||
; 101 : }
|
||||
|
||||
pop esi
|
||||
leave
|
||||
ret 8
|
||||
_Java_com_eaio_nativecall_IntCall_executeCall@8 ENDP
|
||||
_TEXT ENDS
|
||||
PUBLIC ??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@ ; `string'
|
||||
PUBLIC _Java_com_eaio_nativecall_IntCall_executeCall0@12
|
||||
PUBLIC ?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ ; JNIEnv_::NewObject
|
||||
PUBLIC ?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ ; JNIEnv_::CallBooleanMethod
|
||||
PUBLIC ?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ ; JNIEnv_::CallIntMethod
|
||||
EXTRN ?fieldHolderO@@3PAU_jfieldID@@A:DWORD ; fieldHolderO
|
||||
EXTRN ?classBoolean@@3PAV_jclass@@A:DWORD ; classBoolean
|
||||
EXTRN ?classInteger@@3PAV_jclass@@A:DWORD ; classInteger
|
||||
EXTRN ?classByteArray@@3PAV_jclass@@A:DWORD ; classByteArray
|
||||
EXTRN ?classCharArray@@3PAV_jclass@@A:DWORD ; classCharArray
|
||||
EXTRN ?classHolder@@3PAV_jclass@@A:DWORD ; classHolder
|
||||
EXTRN ?methodBooleanValue@@3PAU_jmethodID@@A:DWORD ; methodBooleanValue
|
||||
EXTRN ?methodIntValue@@3PAU_jmethodID@@A:DWORD ; methodIntValue
|
||||
EXTRN ?newIntegerInt@@3PAU_jmethodID@@A:DWORD ; newIntegerInt
|
||||
EXTRN ?newBooleanBoolean@@3PAU_jmethodID@@A:DWORD ; newBooleanBoolean
|
||||
EXTRN ??2@YAPAXI@Z:NEAR ; operator new
|
||||
EXTRN ??3@YAXPAX@Z:NEAR ; operator delete
|
||||
EXTRN _memset:NEAR
|
||||
; COMDAT ??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@
|
||||
; File C:\Program Files\IBMJava13\include\jni.h
|
||||
_DATA SEGMENT
|
||||
??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@ DB 'java/lang/OutOfMemor'
|
||||
DB 'yError', 00H ; `string'
|
||||
_DATA ENDS
|
||||
_TEXT SEGMENT
|
||||
_env$ = 8
|
||||
_obj$ = 12
|
||||
_params$ = 16
|
||||
_len$ = -28
|
||||
_arrays$ = -20
|
||||
_param$ = -24
|
||||
_i$ = 8
|
||||
_intArg$27770 = -24
|
||||
_byteArrayArg$27773 = -4
|
||||
_charArrayArg$27779 = -8
|
||||
_tempArg$27786 = -24
|
||||
_intPtr$27791 = -24
|
||||
_byteArrayArg$27797 = -12
|
||||
_charArrayArg$27803 = -16
|
||||
_tempPtr$27810 = -24
|
||||
_functionHandle$ = 8
|
||||
_outVal$ = -32
|
||||
_j$ = 8
|
||||
_Java_com_eaio_nativecall_IntCall_executeCall0@12 PROC NEAR
|
||||
|
||||
; 109 : (JNIEnv *env, jobject obj, jobjectArray params) {
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
sub esp, 32 ; 00000020H
|
||||
push ebx
|
||||
push esi
|
||||
|
||||
; 110 :
|
||||
; 111 : const int len = env->GetArrayLength(params);
|
||||
|
||||
mov esi, DWORD PTR _env$[ebp]
|
||||
push edi
|
||||
push DWORD PTR _params$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push esi
|
||||
call DWORD PTR [eax+684]
|
||||
mov ebx, eax
|
||||
|
||||
; 112 :
|
||||
; 113 : int* arrays = NULL;
|
||||
; 114 : if (!(arrays = new int[len])) {
|
||||
|
||||
mov edi, ebx
|
||||
mov DWORD PTR _len$[ebp], ebx
|
||||
shl edi, 2
|
||||
push edi
|
||||
call ??2@YAPAXI@Z ; operator new
|
||||
test eax, eax
|
||||
pop ecx
|
||||
mov DWORD PTR _arrays$[ebp], eax
|
||||
jne SHORT $L27759
|
||||
|
||||
; 115 : env->ThrowNew(env->FindClass("java/lang/OutOfMemoryError"), NULL);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push 0
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+56]
|
||||
|
||||
; 116 : return 0;
|
||||
|
||||
xor eax, eax
|
||||
jmp $L27754
|
||||
$L27759:
|
||||
|
||||
; 117 : }
|
||||
; 118 : memset(arrays, 0, (sizeof(int) * len));
|
||||
|
||||
push edi
|
||||
push 0
|
||||
push eax
|
||||
call _memset
|
||||
|
||||
; 119 :
|
||||
; 120 : jobject param;
|
||||
; 121 :
|
||||
; 122 : for (int i = len - 1; i >= 0; i--) {
|
||||
|
||||
lea eax, DWORD PTR [ebx-1]
|
||||
add esp, 12 ; 0000000cH
|
||||
test eax, eax
|
||||
mov DWORD PTR _i$[ebp], eax
|
||||
jl $L27766
|
||||
mov ecx, DWORD PTR _arrays$[ebp]
|
||||
lea edi, DWORD PTR [ecx+eax*4]
|
||||
jmp SHORT $L27764
|
||||
$L28030:
|
||||
|
||||
; 117 : }
|
||||
; 118 : memset(arrays, 0, (sizeof(int) * len));
|
||||
|
||||
mov eax, DWORD PTR _i$[ebp]
|
||||
$L27764:
|
||||
|
||||
; 123 :
|
||||
; 124 : param = env->GetObjectArrayElement(params, i);
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push DWORD PTR _params$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [ecx+692]
|
||||
mov ebx, eax
|
||||
|
||||
; 125 :
|
||||
; 126 : if (param == NULL) {
|
||||
|
||||
test ebx, ebx
|
||||
jne SHORT $L27767
|
||||
|
||||
; 127 : _push(0);
|
||||
|
||||
push 0
|
||||
|
||||
; 128 : }
|
||||
; 129 : else if (env->IsInstanceOf(param, classInteger)) {
|
||||
|
||||
jmp $L27765
|
||||
$L27767:
|
||||
mov eax, DWORD PTR ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27769
|
||||
|
||||
; 130 : int intArg = env->CallIntMethod(param, methodIntValue);
|
||||
|
||||
push DWORD PTR ?methodIntValue@@3PAU_jmethodID@@A ; methodIntValue
|
||||
push ebx
|
||||
push esi
|
||||
call ?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ ; JNIEnv_::CallIntMethod
|
||||
add esp, 12 ; 0000000cH
|
||||
mov DWORD PTR _intArg$27770[ebp], eax
|
||||
|
||||
; 131 : _push(intArg)
|
||||
|
||||
push DWORD PTR _intArg$27770[ebp]
|
||||
|
||||
; 132 : }
|
||||
; 133 : else if (env->IsInstanceOf(param, classByteArray)) {
|
||||
|
||||
jmp $L27765
|
||||
$L27769:
|
||||
mov eax, DWORD PTR ?classByteArray@@3PAV_jclass@@A ; classByteArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27772
|
||||
|
||||
; 134 : char* byteArrayArg = (char*) env->GetPrimitiveArrayCritical((jarray) param, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+888]
|
||||
mov DWORD PTR _byteArrayArg$27773[ebp], eax
|
||||
|
||||
; 135 : arrays[i] = (int) &byteArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _byteArrayArg$27773[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 136 : _push(byteArrayArg)
|
||||
|
||||
push DWORD PTR _byteArrayArg$27773[ebp]
|
||||
|
||||
; 137 : }
|
||||
; 138 : else if (env->IsInstanceOf(param, classCharArray)) {
|
||||
|
||||
jmp $L27765
|
||||
$L27772:
|
||||
mov eax, DWORD PTR ?classCharArray@@3PAV_jclass@@A ; classCharArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27778
|
||||
|
||||
; 139 : unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
; 140 : (jarray) param, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+888]
|
||||
mov DWORD PTR _charArrayArg$27779[ebp], eax
|
||||
|
||||
; 141 : arrays[i] = (int) &charArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _charArrayArg$27779[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 142 : _push(charArrayArg)
|
||||
|
||||
push DWORD PTR _charArrayArg$27779[ebp]
|
||||
|
||||
; 143 : }
|
||||
; 144 : else if (env->IsInstanceOf(param, classBoolean)) {
|
||||
|
||||
jmp $L27765
|
||||
$L27778:
|
||||
mov eax, DWORD PTR ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27784
|
||||
|
||||
; 145 : jboolean booleanArg = env->CallBooleanMethod(param, methodBooleanValue);
|
||||
|
||||
push DWORD PTR ?methodBooleanValue@@3PAU_jmethodID@@A ; methodBooleanValue
|
||||
push ebx
|
||||
push esi
|
||||
call ?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ ; JNIEnv_::CallBooleanMethod
|
||||
add esp, 12 ; 0000000cH
|
||||
|
||||
; 146 : int tempArg = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
|
||||
neg al
|
||||
sbb eax, eax
|
||||
neg eax
|
||||
mov DWORD PTR _tempArg$27786[ebp], eax
|
||||
|
||||
; 147 : _push(tempArg)
|
||||
|
||||
push DWORD PTR _tempArg$27786[ebp]
|
||||
|
||||
; 148 : }
|
||||
; 149 : else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
jmp $L27765
|
||||
$L27784:
|
||||
mov eax, DWORD PTR ?classHolder@@3PAV_jclass@@A ; classHolder
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je $L27765
|
||||
|
||||
; 150 :
|
||||
; 151 : /* Holder */
|
||||
; 152 :
|
||||
; 153 : jobject o = env->GetObjectField(param, fieldHolderO);
|
||||
|
||||
mov eax, DWORD PTR ?fieldHolderO@@3PAU_jfieldID@@A ; fieldHolderO
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+380]
|
||||
|
||||
; 154 :
|
||||
; 155 : if (env->IsInstanceOf(o, classInteger)) {
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov ebx, eax
|
||||
mov eax, DWORD PTR ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27790
|
||||
|
||||
; 156 : int *intPtr = new int;
|
||||
|
||||
push 4
|
||||
call ??2@YAPAXI@Z ; operator new
|
||||
pop ecx
|
||||
mov DWORD PTR _intPtr$27791[ebp], eax
|
||||
|
||||
; 157 : *intPtr = env->CallIntMethod(o, methodIntValue);
|
||||
|
||||
push DWORD PTR ?methodIntValue@@3PAU_jmethodID@@A ; methodIntValue
|
||||
push ebx
|
||||
push esi
|
||||
call ?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ ; JNIEnv_::CallIntMethod
|
||||
mov ecx, DWORD PTR _intPtr$27791[ebp]
|
||||
add esp, 12 ; 0000000cH
|
||||
|
||||
; 158 : arrays[i] = (int) intPtr;
|
||||
|
||||
mov DWORD PTR [edi], ecx
|
||||
mov DWORD PTR [ecx], eax
|
||||
|
||||
; 159 : _push(intPtr);
|
||||
|
||||
push DWORD PTR _intPtr$27791[ebp]
|
||||
|
||||
; 160 : }
|
||||
; 161 : else if (env->IsInstanceOf(o, classByteArray)) {
|
||||
|
||||
jmp $L27765
|
||||
$L27790:
|
||||
mov eax, DWORD PTR ?classByteArray@@3PAV_jclass@@A ; classByteArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27796
|
||||
|
||||
; 162 : char* byteArrayArg = (char*) env->GetPrimitiveArrayCritical((jarray) o, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+888]
|
||||
mov DWORD PTR _byteArrayArg$27797[ebp], eax
|
||||
|
||||
; 163 : arrays[i] = (int) &byteArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _byteArrayArg$27797[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 164 : _push(byteArrayArg)
|
||||
|
||||
push DWORD PTR _byteArrayArg$27797[ebp]
|
||||
|
||||
; 165 : }
|
||||
; 166 : else if (env->IsInstanceOf(o, classCharArray)) {
|
||||
|
||||
jmp SHORT $L27765
|
||||
$L27796:
|
||||
mov eax, DWORD PTR ?classCharArray@@3PAV_jclass@@A ; classCharArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27802
|
||||
|
||||
; 167 : unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
; 168 : (jarray) o, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+888]
|
||||
mov DWORD PTR _charArrayArg$27803[ebp], eax
|
||||
|
||||
; 169 : arrays[i] = (int) &charArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _charArrayArg$27803[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 170 : _push(charArrayArg)
|
||||
|
||||
push DWORD PTR _charArrayArg$27803[ebp]
|
||||
|
||||
; 171 : }
|
||||
; 172 : else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
|
||||
jmp SHORT $L27765
|
||||
$L27802:
|
||||
mov eax, DWORD PTR ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27765
|
||||
|
||||
; 173 : jboolean booleanArg = env->CallBooleanMethod(o, methodBooleanValue);
|
||||
|
||||
push DWORD PTR ?methodBooleanValue@@3PAU_jmethodID@@A ; methodBooleanValue
|
||||
push ebx
|
||||
push esi
|
||||
call ?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ ; JNIEnv_::CallBooleanMethod
|
||||
|
||||
; 174 : int *tempPtr = new int;
|
||||
|
||||
push 4
|
||||
mov bl, al
|
||||
call ??2@YAPAXI@Z ; operator new
|
||||
add esp, 16 ; 00000010H
|
||||
|
||||
; 175 : *tempPtr = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
|
||||
xor ecx, ecx
|
||||
test bl, bl
|
||||
setne cl
|
||||
mov DWORD PTR _tempPtr$27810[ebp], eax
|
||||
mov DWORD PTR [eax], ecx
|
||||
|
||||
; 176 : arrays[i] = (int) tempPtr;
|
||||
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 177 : _push(tempPtr);
|
||||
|
||||
push DWORD PTR _tempPtr$27810[ebp]
|
||||
|
||||
; 176 : arrays[i] = (int) tempPtr;
|
||||
|
||||
$L27765:
|
||||
dec DWORD PTR _i$[ebp]
|
||||
sub edi, 4
|
||||
cmp DWORD PTR _i$[ebp], 0
|
||||
jge $L28030
|
||||
|
||||
; 119 :
|
||||
; 120 : jobject param;
|
||||
; 121 :
|
||||
; 122 : for (int i = len - 1; i >= 0; i--) {
|
||||
|
||||
mov ebx, DWORD PTR _len$[ebp]
|
||||
$L27766:
|
||||
|
||||
; 178 : }
|
||||
; 179 :
|
||||
; 180 : /* end Holder */
|
||||
; 181 :
|
||||
; 182 : }
|
||||
; 183 :
|
||||
; 184 : }
|
||||
; 185 :
|
||||
; 186 : jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
|
||||
mov eax, DWORD PTR ?fieldFunctionHandle@@3PAU_jfieldID@@A ; fieldFunctionHandle
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push DWORD PTR _obj$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [ecx+400]
|
||||
mov DWORD PTR _functionHandle$[ebp], eax
|
||||
|
||||
; 187 : jint outVal;
|
||||
; 188 :
|
||||
; 189 : #ifdef _WINDOWS
|
||||
; 190 : #ifdef _X86_
|
||||
; 191 :
|
||||
; 192 : __asm {
|
||||
; 193 :
|
||||
; 194 : call functionHandle
|
||||
|
||||
call DWORD PTR _functionHandle$[ebp]
|
||||
|
||||
; 195 : mov outVal, eax
|
||||
|
||||
mov DWORD PTR _outVal$[ebp], eax
|
||||
|
||||
; 196 :
|
||||
; 197 : }
|
||||
; 198 :
|
||||
; 199 : #endif
|
||||
; 200 : #endif
|
||||
; 201 :
|
||||
; 202 : for (int j = 0; j < len; ++j) {
|
||||
|
||||
and DWORD PTR _j$[ebp], 0
|
||||
test ebx, ebx
|
||||
jle $L27819
|
||||
|
||||
; 178 : }
|
||||
; 179 :
|
||||
; 180 : /* end Holder */
|
||||
; 181 :
|
||||
; 182 : }
|
||||
; 183 :
|
||||
; 184 : }
|
||||
; 185 :
|
||||
; 186 : jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
|
||||
mov ebx, DWORD PTR _arrays$[ebp]
|
||||
$L27817:
|
||||
|
||||
; 203 : param = env->GetObjectArrayElement(params, j);
|
||||
|
||||
push DWORD PTR _j$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push DWORD PTR _params$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [eax+692]
|
||||
mov edi, eax
|
||||
|
||||
; 204 : if (param == NULL) {}
|
||||
|
||||
test edi, edi
|
||||
mov DWORD PTR _param$[ebp], edi
|
||||
je $L27818
|
||||
|
||||
; 205 : else if (env->IsInstanceOf(param, classByteArray) || env->IsInstanceOf(param, classCharArray)) {
|
||||
|
||||
mov eax, DWORD PTR ?classByteArray@@3PAV_jclass@@A ; classByteArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
jne $L27835
|
||||
mov eax, DWORD PTR ?classCharArray@@3PAV_jclass@@A ; classCharArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
jne $L27835
|
||||
|
||||
; 207 : }
|
||||
; 208 : else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
mov eax, DWORD PTR ?classHolder@@3PAV_jclass@@A ; classHolder
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je $L27818
|
||||
|
||||
; 209 :
|
||||
; 210 : jobject o = env->GetObjectField(param, fieldHolderO);
|
||||
|
||||
mov eax, DWORD PTR ?fieldHolderO@@3PAU_jfieldID@@A ; fieldHolderO
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+380]
|
||||
|
||||
; 211 :
|
||||
; 212 : if (env->IsInstanceOf(o, classInteger)) {
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov edi, eax
|
||||
mov eax, DWORD PTR ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27829
|
||||
|
||||
; 213 : int* out = (int*) arrays[j];
|
||||
|
||||
mov edi, DWORD PTR [ebx]
|
||||
|
||||
; 214 : env->SetObjectField(param, fieldHolderO, env->NewObject(classInteger, newIntegerInt, *out));
|
||||
|
||||
push DWORD PTR [edi]
|
||||
push DWORD PTR ?newIntegerInt@@3PAU_jmethodID@@A ; newIntegerInt
|
||||
push DWORD PTR ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
$L28033:
|
||||
push esi
|
||||
call ?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ ; JNIEnv_::NewObject
|
||||
add esp, 16 ; 00000010H
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push DWORD PTR ?fieldHolderO@@3PAU_jfieldID@@A ; fieldHolderO
|
||||
push DWORD PTR _param$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [ecx+416]
|
||||
|
||||
; 215 : delete out;
|
||||
|
||||
push edi
|
||||
call ??3@YAXPAX@Z ; operator delete
|
||||
pop ecx
|
||||
|
||||
; 216 : }
|
||||
; 217 : else if (env->IsInstanceOf(o, classByteArray) || env->IsInstanceOf(o, classCharArray)) {
|
||||
|
||||
jmp SHORT $L27818
|
||||
$L27829:
|
||||
mov eax, DWORD PTR ?classByteArray@@3PAV_jclass@@A ; classByteArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
jne SHORT $L27835
|
||||
mov eax, DWORD PTR ?classCharArray@@3PAV_jclass@@A ; classCharArray
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
jne SHORT $L27835
|
||||
|
||||
; 218 : env->ReleasePrimitiveArrayCritical((jarray) o, (void*) arrays[j], 0);
|
||||
; 219 : }
|
||||
; 220 : else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
|
||||
mov eax, DWORD PTR ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+128]
|
||||
test al, al
|
||||
je SHORT $L27818
|
||||
|
||||
; 221 : int* out = (int*) arrays[j];
|
||||
|
||||
mov edi, DWORD PTR [ebx]
|
||||
|
||||
; 222 : env->SetObjectField(param, fieldHolderO, env->NewObject(classBoolean, newBooleanBoolean, (*out == 0 ? JNI_FALSE : JNI_TRUE)));
|
||||
|
||||
xor eax, eax
|
||||
cmp DWORD PTR [edi], eax
|
||||
setne al
|
||||
push eax
|
||||
push DWORD PTR ?newBooleanBoolean@@3PAU_jmethodID@@A ; newBooleanBoolean
|
||||
push DWORD PTR ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
|
||||
; 223 : delete out;
|
||||
|
||||
jmp SHORT $L28033
|
||||
$L27835:
|
||||
|
||||
; 206 : env->ReleasePrimitiveArrayCritical((jarray) param, (void*) arrays[j], 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push DWORD PTR [ebx]
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [eax+892]
|
||||
$L27818:
|
||||
inc DWORD PTR _j$[ebp]
|
||||
mov eax, DWORD PTR _j$[ebp]
|
||||
add ebx, 4
|
||||
cmp eax, DWORD PTR _len$[ebp]
|
||||
jl $L27817
|
||||
$L27819:
|
||||
|
||||
; 224 : }
|
||||
; 225 :
|
||||
; 226 : }
|
||||
; 227 :
|
||||
; 228 : }
|
||||
; 229 :
|
||||
; 230 : delete [] arrays;
|
||||
|
||||
push DWORD PTR _arrays$[ebp]
|
||||
call ??3@YAXPAX@Z ; operator delete
|
||||
pop ecx
|
||||
|
||||
; 231 :
|
||||
; 232 : env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
|
||||
call DWORD PTR __imp__GetLastError@0
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push DWORD PTR ?fieldLastErrorCode@@3PAU_jfieldID@@A ; fieldLastErrorCode
|
||||
push DWORD PTR _obj$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [ecx+436]
|
||||
|
||||
; 233 :
|
||||
; 234 : return outVal;
|
||||
|
||||
mov eax, DWORD PTR _outVal$[ebp]
|
||||
$L27754:
|
||||
|
||||
; 235 :
|
||||
; 236 : }
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
leave
|
||||
ret 12 ; 0000000cH
|
||||
_Java_com_eaio_nativecall_IntCall_executeCall0@12 ENDP
|
||||
_TEXT ENDS
|
||||
; COMDAT ?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ
|
||||
_TEXT SEGMENT
|
||||
_this$ = 8
|
||||
_clazz$ = 12
|
||||
_methodID$ = 16
|
||||
?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ PROC NEAR ; JNIEnv_::NewObject, COMDAT
|
||||
|
||||
; 835 : va_list args;
|
||||
; 836 : jobject result;
|
||||
; 837 : va_start(args, methodID);
|
||||
; 838 : result = functions->NewObjectV(this,clazz,methodID,args);
|
||||
|
||||
mov eax, DWORD PTR _this$[esp-4]
|
||||
lea edx, DWORD PTR _methodID$[esp]
|
||||
push edx
|
||||
push DWORD PTR _methodID$[esp]
|
||||
mov ecx, DWORD PTR [eax]
|
||||
push DWORD PTR _clazz$[esp+4]
|
||||
push eax
|
||||
call DWORD PTR [ecx+116]
|
||||
|
||||
; 839 : va_end(args);
|
||||
; 840 : return result;
|
||||
; 841 : }
|
||||
|
||||
ret 0
|
||||
?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ ENDP ; JNIEnv_::NewObject
|
||||
_TEXT ENDS
|
||||
; COMDAT ?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ
|
||||
_TEXT SEGMENT
|
||||
_this$ = 8
|
||||
_obj$ = 12
|
||||
_methodID$ = 16
|
||||
?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ PROC NEAR ; JNIEnv_::CallBooleanMethod, COMDAT
|
||||
|
||||
; 882 : va_list args;
|
||||
; 883 : jboolean result;
|
||||
; 884 : va_start(args,methodID);
|
||||
; 885 : result = functions->CallBooleanMethodV(this,obj,methodID,args);
|
||||
|
||||
mov eax, DWORD PTR _this$[esp-4]
|
||||
lea edx, DWORD PTR _methodID$[esp]
|
||||
push edx
|
||||
push DWORD PTR _methodID$[esp]
|
||||
mov ecx, DWORD PTR [eax]
|
||||
push DWORD PTR _obj$[esp+4]
|
||||
push eax
|
||||
call DWORD PTR [ecx+152]
|
||||
|
||||
; 886 : va_end(args);
|
||||
; 887 : return result;
|
||||
; 888 : }
|
||||
|
||||
ret 0
|
||||
?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ ENDP ; JNIEnv_::CallBooleanMethod
|
||||
_TEXT ENDS
|
||||
; COMDAT ?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ
|
||||
_TEXT SEGMENT
|
||||
_this$ = 8
|
||||
_obj$ = 12
|
||||
_methodID$ = 16
|
||||
?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ PROC NEAR ; JNIEnv_::CallIntMethod, COMDAT
|
||||
|
||||
; 950 : va_list args;
|
||||
; 951 : jint result;
|
||||
; 952 : va_start(args,methodID);
|
||||
; 953 : result = functions->CallIntMethodV(this,obj,methodID,args);
|
||||
|
||||
mov eax, DWORD PTR _this$[esp-4]
|
||||
lea edx, DWORD PTR _methodID$[esp]
|
||||
push edx
|
||||
push DWORD PTR _methodID$[esp]
|
||||
mov ecx, DWORD PTR [eax]
|
||||
push DWORD PTR _obj$[esp+4]
|
||||
push eax
|
||||
call DWORD PTR [ecx+200]
|
||||
|
||||
; 954 : va_end(args);
|
||||
; 955 : return result;
|
||||
; 956 : }
|
||||
|
||||
ret 0
|
||||
?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ ENDP ; JNIEnv_::CallIntMethod
|
||||
_TEXT ENDS
|
||||
END
|
||||
Reference in New Issue
Block a user