This commit is contained in:
1766
cpp/nativecall/Debug/IntCall.asm
Normal file
1766
cpp/nativecall/Debug/IntCall.asm
Normal file
File diff suppressed because it is too large
Load Diff
BIN
cpp/nativecall/Debug/IntCall.obj
Normal file
BIN
cpp/nativecall/Debug/IntCall.obj
Normal file
Binary file not shown.
1492
cpp/nativecall/Debug/NativeCall.asm
Normal file
1492
cpp/nativecall/Debug/NativeCall.asm
Normal file
File diff suppressed because it is too large
Load Diff
BIN
cpp/nativecall/Debug/NativeCall.dll
Normal file
BIN
cpp/nativecall/Debug/NativeCall.dll
Normal file
Binary file not shown.
BIN
cpp/nativecall/Debug/NativeCall.obj
Normal file
BIN
cpp/nativecall/Debug/NativeCall.obj
Normal file
Binary file not shown.
BIN
cpp/nativecall/Debug/RCa01372
Normal file
BIN
cpp/nativecall/Debug/RCa01372
Normal file
Binary file not shown.
BIN
cpp/nativecall/Debug/RCa01444
Normal file
BIN
cpp/nativecall/Debug/RCa01444
Normal file
Binary file not shown.
BIN
cpp/nativecall/Debug/RCa01468
Normal file
BIN
cpp/nativecall/Debug/RCa01468
Normal file
Binary file not shown.
1743
cpp/nativecall/Debug/VoidCall.asm
Normal file
1743
cpp/nativecall/Debug/VoidCall.asm
Normal file
File diff suppressed because it is too large
Load Diff
BIN
cpp/nativecall/Debug/VoidCall.obj
Normal file
BIN
cpp/nativecall/Debug/VoidCall.obj
Normal file
Binary file not shown.
236
cpp/nativecall/IntCall.cpp
Normal file
236
cpp/nativecall/IntCall.cpp
Normal file
@@ -0,0 +1,236 @@
|
||||
/*
|
||||
* IntCall.cpp
|
||||
*
|
||||
* Created on 11.09.2004.
|
||||
*
|
||||
* $Id: IntCall.cpp,v 1.3 2006/04/19 20:54:55 grnull Exp $
|
||||
*
|
||||
* eaio: NativeCall - calling operating system methods from Java
|
||||
* Copyright (c) 2004-2006 Johann Burkard (<mailto:jb@eaio.com>)
|
||||
* <http://eaio.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <jni.h>
|
||||
#include "com_eaio_nativecall_IntCall.h"
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <windows.h>
|
||||
#include <winbase.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#ifdef _X86_
|
||||
|
||||
#define _push(x) __asm { push x };
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// NativeCall fields
|
||||
|
||||
extern jfieldID fieldFunction, fieldModule, fieldFunctionHandle,
|
||||
fieldModuleHandle, fieldLastErrorCode;
|
||||
|
||||
// Holder fields
|
||||
|
||||
extern jfieldID fieldHolderO;
|
||||
|
||||
// Classes
|
||||
|
||||
extern jclass classBoolean,/* classByte, classCharacter, classShort,*/
|
||||
classInteger, /* classLong, classFloat, classDouble,*/ classString,
|
||||
classByteArray, classCharArray, /*classIntArray,*/ classHolder;
|
||||
|
||||
// Wrapper class methods
|
||||
|
||||
extern jmethodID methodBooleanValue,/* methodByteValue, methodCharValue,
|
||||
methodShortValue,*/ methodIntValue/*, methodLongValue, methodFloatValue,
|
||||
methodDoubleValue*/;
|
||||
|
||||
// Constructors
|
||||
|
||||
extern jmethodID newIntegerInt, newBooleanBoolean;
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_IntCall
|
||||
* Method: executeCall
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_eaio_nativecall_IntCall_executeCall
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
jint outVal;
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#ifdef _X86_
|
||||
|
||||
__asm {
|
||||
|
||||
call functionHandle
|
||||
mov outVal, eax
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
|
||||
return outVal;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_IntCall
|
||||
* Method: executeCall0
|
||||
* Signature: ([Ljava/lang/Object;)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_eaio_nativecall_IntCall_executeCall0
|
||||
(JNIEnv *env, jobject obj, jobjectArray params) {
|
||||
|
||||
const int len = env->GetArrayLength(params);
|
||||
|
||||
int* arrays = NULL;
|
||||
if (!(arrays = new int[len])) {
|
||||
env->ThrowNew(env->FindClass("java/lang/OutOfMemoryError"), NULL);
|
||||
return 0;
|
||||
}
|
||||
memset(arrays, 0, (sizeof(int) * len));
|
||||
|
||||
jobject param;
|
||||
|
||||
for (int i = len - 1; i >= 0; i--) {
|
||||
|
||||
param = env->GetObjectArrayElement(params, i);
|
||||
|
||||
if (param == NULL) {
|
||||
_push(0);
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classInteger)) {
|
||||
int intArg = env->CallIntMethod(param, methodIntValue);
|
||||
_push(intArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classByteArray)) {
|
||||
char* byteArrayArg = (char*) env->GetPrimitiveArrayCritical((jarray) param, 0);
|
||||
arrays[i] = (int) &byteArrayArg;
|
||||
_push(byteArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classCharArray)) {
|
||||
unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
(jarray) param, 0);
|
||||
arrays[i] = (int) &charArrayArg;
|
||||
_push(charArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classBoolean)) {
|
||||
jboolean booleanArg = env->CallBooleanMethod(param, methodBooleanValue);
|
||||
int tempArg = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
_push(tempArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
/* Holder */
|
||||
|
||||
jobject o = env->GetObjectField(param, fieldHolderO);
|
||||
|
||||
if (env->IsInstanceOf(o, classInteger)) {
|
||||
int *intPtr = new int;
|
||||
*intPtr = env->CallIntMethod(o, methodIntValue);
|
||||
arrays[i] = (int) intPtr;
|
||||
_push(intPtr);
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classByteArray)) {
|
||||
char* byteArrayArg = (char*) env->GetPrimitiveArrayCritical((jarray) o, 0);
|
||||
arrays[i] = (int) &byteArrayArg;
|
||||
_push(byteArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classCharArray)) {
|
||||
unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
(jarray) o, 0);
|
||||
arrays[i] = (int) &charArrayArg;
|
||||
_push(charArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
jboolean booleanArg = env->CallBooleanMethod(o, methodBooleanValue);
|
||||
int *tempPtr = new int;
|
||||
*tempPtr = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
arrays[i] = (int) tempPtr;
|
||||
_push(tempPtr);
|
||||
}
|
||||
|
||||
/* end Holder */
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
jint outVal;
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#ifdef _X86_
|
||||
|
||||
__asm {
|
||||
|
||||
call functionHandle
|
||||
mov outVal, eax
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
for (int j = 0; j < len; ++j) {
|
||||
param = env->GetObjectArrayElement(params, j);
|
||||
if (param == NULL) {}
|
||||
else if (env->IsInstanceOf(param, classByteArray) || env->IsInstanceOf(param, classCharArray)) {
|
||||
env->ReleasePrimitiveArrayCritical((jarray) param, (void*) arrays[j], 0);
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
jobject o = env->GetObjectField(param, fieldHolderO);
|
||||
|
||||
if (env->IsInstanceOf(o, classInteger)) {
|
||||
int* out = (int*) arrays[j];
|
||||
env->SetObjectField(param, fieldHolderO, env->NewObject(classInteger, newIntegerInt, *out));
|
||||
delete out;
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classByteArray) || env->IsInstanceOf(o, classCharArray)) {
|
||||
env->ReleasePrimitiveArrayCritical((jarray) o, (void*) arrays[j], 0);
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
int* out = (int*) arrays[j];
|
||||
env->SetObjectField(param, fieldHolderO, env->NewObject(classBoolean, newBooleanBoolean, (*out == 0 ? JNI_FALSE : JNI_TRUE)));
|
||||
delete out;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
delete [] arrays;
|
||||
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
|
||||
return outVal;
|
||||
|
||||
}
|
||||
234
cpp/nativecall/NativeCall.cpp
Normal file
234
cpp/nativecall/NativeCall.cpp
Normal file
@@ -0,0 +1,234 @@
|
||||
/*
|
||||
* NativeCall.cpp
|
||||
*
|
||||
* Created on 11.09.2004.
|
||||
*
|
||||
* $Id: NativeCall.cpp,v 1.4 2006/04/19 20:54:55 grnull Exp $
|
||||
*
|
||||
* eaio: NativeCall - calling operating system methods from Java
|
||||
* Copyright (c) 2004-2006 Johann Burkard (<mailto:jb@eaio.com>)
|
||||
* <http://eaio.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <jni.h>
|
||||
#include "com_eaio_nativecall_NativeCall.h"
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <windows.h>
|
||||
#include <winbase.h>
|
||||
#endif
|
||||
|
||||
// NativeCall fields
|
||||
|
||||
jfieldID fieldFunction, fieldModule, fieldFunctionHandle,
|
||||
fieldModuleHandle, fieldLastErrorCode;
|
||||
|
||||
// Holder fields
|
||||
|
||||
jfieldID fieldHolderO;
|
||||
|
||||
// Classes
|
||||
|
||||
jclass classBoolean,/* classByte, classCharacter, classShort,*/
|
||||
classInteger, /* classLong, classFloat, classDouble,*/ classString,
|
||||
classByteArray, classCharArray, /*classIntArray,*/ classHolder;
|
||||
|
||||
// Wrapper class methods
|
||||
|
||||
jmethodID methodBooleanValue,/* methodByteValue, methodCharValue,
|
||||
methodShortValue,*/ methodIntValue/*, methodLongValue, methodFloatValue,
|
||||
methodDoubleValue*/;
|
||||
|
||||
// Constructors
|
||||
|
||||
jmethodID newIntegerInt, newBooleanBoolean;
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: initIDs
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_NativeCall_initIDs
|
||||
(JNIEnv *env, jclass cls) {
|
||||
|
||||
// NativeCall fields
|
||||
|
||||
fieldFunction = env->GetFieldID(cls, "function", "Ljava/lang/String;");
|
||||
fieldModule = env->GetFieldID(cls, "module", "Ljava/lang/String;");
|
||||
|
||||
fieldFunctionHandle = env->GetFieldID(cls, "functionHandle", "I");
|
||||
fieldModuleHandle = env-> GetFieldID(cls, "moduleHandle", "I");
|
||||
|
||||
fieldLastErrorCode = env->GetFieldID(cls, "lastErrorCode", "I");
|
||||
|
||||
// Holder fields
|
||||
|
||||
classHolder = (jclass) env->NewGlobalRef(env->FindClass("com/eaio/nativecall/Holder"));
|
||||
fieldHolderO = env->GetFieldID(classHolder, "o", "Ljava/lang/Object;");
|
||||
|
||||
// Other classes
|
||||
|
||||
classBoolean = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Boolean"));
|
||||
/*classByte = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Byte"));
|
||||
classCharacter = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Character"));
|
||||
classShort = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Short"));*/
|
||||
classInteger = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Integer"));
|
||||
/*classLong = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Long"));
|
||||
classFloat = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Float"));
|
||||
classDouble = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Double"));*/
|
||||
classString = (jclass) env->NewGlobalRef(env->FindClass("java/lang/String"));
|
||||
classByteArray = (jclass) env->NewGlobalRef(env->FindClass("[B"));
|
||||
classCharArray = (jclass) env->NewGlobalRef(env->FindClass("[C"));
|
||||
/*classIntArray = (jclass) env->NewGlobalRef(env->FindClass("[I"));*/
|
||||
|
||||
// Wrapper class methods
|
||||
|
||||
methodBooleanValue = env->GetMethodID(classBoolean,
|
||||
"booleanValue", "()Z");
|
||||
/*methodByteValue = env->GetMethodID(classByte,
|
||||
"byteValue", "()B");
|
||||
methodCharValue = env->GetMethodID(classCharacter,
|
||||
"charValue", "()C");
|
||||
methodShortValue = env->GetMethodID(classShort,
|
||||
"shortValue", "()S");*/
|
||||
methodIntValue = env->GetMethodID(classInteger,
|
||||
"intValue", "()I");
|
||||
/*methodLongValue = env->GetMethodID(classLong,
|
||||
"longValue", "()J");
|
||||
methodFloatValue = env->GetMethodID(classFloat,
|
||||
"floatValue", "()F");
|
||||
methodDoubleValue = env->GetMethodID(classDouble,
|
||||
"doubleValue", "()D");*/
|
||||
|
||||
// Constructors
|
||||
|
||||
newIntegerInt = env->GetMethodID(classInteger, "<init>", "(I)V");
|
||||
newBooleanBoolean = env->GetMethodID(classBoolean, "<init>", "(Z)V");
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: initHandles
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_eaio_nativecall_NativeCall_initHandles
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
bool out = JNI_TRUE;
|
||||
|
||||
jstring moduleNameS = (jstring) env->GetObjectField(obj, fieldModule);
|
||||
jstring functionNameS = (jstring) env->GetObjectField(obj, fieldFunction);
|
||||
|
||||
const char* moduleName = env->GetStringUTFChars(moduleNameS, 0);
|
||||
const char* functionName = env->GetStringUTFChars(functionNameS, 0);
|
||||
|
||||
#ifdef _WINDOWS
|
||||
|
||||
HMODULE mod = LoadLibrary(moduleName);
|
||||
|
||||
if (mod == NULL) {
|
||||
/* no such module or DllMain returned FALSE */
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
out = JNI_FALSE;
|
||||
}
|
||||
else {
|
||||
FARPROC addr = GetProcAddress(mod, functionName);
|
||||
if (addr == NULL) {
|
||||
/* function not found */
|
||||
FreeLibrary(mod);
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
out = JNI_FALSE;
|
||||
}
|
||||
else {
|
||||
/* all ok */
|
||||
env->SetIntField(obj, fieldModuleHandle, (jint) mod);
|
||||
env->SetIntField(obj, fieldFunctionHandle, (jint) addr);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
env->ReleaseStringUTFChars(moduleNameS, moduleName);
|
||||
env->ReleaseStringUTFChars(functionNameS, functionName);
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: getLastError
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_eaio_nativecall_NativeCall_getLastError
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
jint lastError = env->GetIntField(obj, fieldLastErrorCode);
|
||||
|
||||
if (lastError == 0) return NULL;
|
||||
|
||||
jstring out = NULL;
|
||||
|
||||
#ifdef _WINDOWS
|
||||
|
||||
LPVOID msgBufPtr = NULL;
|
||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_FROM_SYSTEM, NULL, lastError, 0,
|
||||
(LPSTR) &msgBufPtr, 0, NULL);
|
||||
|
||||
out = env->NewStringUTF((char*) msgBufPtr);
|
||||
|
||||
LocalFree(msgBufPtr);
|
||||
|
||||
#endif
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: destroy
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_NativeCall_destroy
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
jint module = env->GetIntField(obj, fieldModuleHandle);
|
||||
|
||||
if (module == 0) return;
|
||||
|
||||
#ifdef _WINDOWS
|
||||
|
||||
if (FreeLibrary((HMODULE) module) == 0) {
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
env->SetIntField(obj, fieldModuleHandle, 0);
|
||||
env->SetIntField(obj, fieldFunctionHandle, 0);
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
132
cpp/nativecall/NativeCall.dsp
Normal file
132
cpp/nativecall/NativeCall.dsp
Normal file
@@ -0,0 +1,132 @@
|
||||
# Microsoft Developer Studio Project File - Name="NativeCall" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** NICHT BEARBEITEN **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||
|
||||
CFG=NativeCall - Win32 Debug
|
||||
!MESSAGE Dies ist kein g<>ltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
|
||||
!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und f<>hren Sie den Befehl
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "NativeCall.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE Sie k<>nnen beim Ausf<73>hren von NMAKE eine Konfiguration angeben
|
||||
!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "NativeCall.mak" CFG="NativeCall - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE F<>r die Konfiguration stehen zur Auswahl:
|
||||
!MESSAGE
|
||||
!MESSAGE "NativeCall - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
||||
!MESSAGE "NativeCall - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "NativeCall - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NATIVECALL_EXPORTS" /YX /FD /c
|
||||
# ADD CPP /nologo /G5 /MD /W3 /Oa /Og /Os /Oy /Ob2 /Gf /I "C:\Program Files\IBMJava13\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NATIVECALL_EXPORTS" /D "WIN32_LEAN_AND_MEAN" /FAs /FR /YX /FD /c
|
||||
# SUBTRACT CPP /Ox /Ot /Gy
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
||||
# ADD RSC /l 0x407 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
|
||||
# ADD LINK32 kernel32.lib libctiny.lib "C:\Program Files\Microsoft Visual Studio\VC98\Lib\libcmt.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\msvcrt.lib" /nologo /subsystem:console /dll /map /machine:I386 /nodefaultlib /MERGE:".rdata=.text" /OPT:REF /OPT:NOWIN98
|
||||
# SUBTRACT LINK32 /pdb:none
|
||||
|
||||
!ELSEIF "$(CFG)" == "NativeCall - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NATIVECALL_EXPORTS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "C:\Program Files\IBMJava13\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NATIVECALL_EXPORTS" /FAs /FR /YX /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "NativeCall - Win32 Release"
|
||||
# Name "NativeCall - Win32 Debug"
|
||||
# Begin Group "Quellcodedateien"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\IntCall.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\NativeCall.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\version.rc
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\VoidCall.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header-Dateien"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\com_eaio_nativecall_IntCall.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\com_eaio_nativecall_NativeCall.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\com_eaio_nativecall_VoidCall.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Ressourcendateien"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
29
cpp/nativecall/NativeCall.dsw
Normal file
29
cpp/nativecall/NativeCall.dsw
Normal file
@@ -0,0 +1,29 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GEL<45>SCHT WERDEN!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "NativeCall"=".\NativeCall.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
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
|
||||
BIN
cpp/nativecall/Release/IntCall.obj
Normal file
BIN
cpp/nativecall/Release/IntCall.obj
Normal file
Binary file not shown.
859
cpp/nativecall/Release/NativeCall.asm
Normal file
859
cpp/nativecall/Release/NativeCall.asm
Normal file
@@ -0,0 +1,859 @@
|
||||
TITLE C:\Documents and Settings\Administrator\My Documents\Software\NativeCall\src\cpp\NativeCall.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@_0BD@DFD@Ljava?1lang?1String?$DL?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_08JJOG@function?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_06CODG@module?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_01FLOP@I?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0P@LKIL@functionHandle?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0N@EFAA@moduleHandle?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0O@OMHL@lastErrorCode?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BL@DALH@com?1eaio?1nativecall?1Holder?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BD@GEDI@Ljava?1lang?1Object?$DL?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_01PGHN@o?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BC@IGNJ@java?1lang?1Boolean?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BC@FBKL@java?1lang?1Integer?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BB@LLFN@java?1lang?1String?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_02LOEJ@?$FLB?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_02BENO@?$FLC?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_03KJOK@?$CI?$CJZ?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0N@KEBP@booleanValue?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_03PPCD@?$CI?$CJI?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_08JCMA@intValue?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_04ECLF@?$CII?$CJV?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_06KILP@?$DMinit?$DO?$AA@
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_04JFOE@?$CIZ?$CJV?$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 ?NewGlobalRef@JNIEnv_@@QAEPAV_jobject@@PAV2@@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetMethodID@JNIEnv_@@QAEPAU_jmethodID@@PAV_jclass@@PBD1@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetFieldID@JNIEnv_@@QAEPAU_jfieldID@@PAV_jclass@@PBD1@Z
|
||||
_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 ?SetIntField@JNIEnv_@@QAEXPAV_jobject@@PAU_jfieldID@@J@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?NewStringUTF@JNIEnv_@@QAEPAV_jstring@@PBD@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?GetStringUTFChars@JNIEnv_@@QAEPBDPAV_jstring@@PAE@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
; COMDAT ?ReleaseStringUTFChars@JNIEnv_@@QAEXPAV_jstring@@PBD@Z
|
||||
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
|
||||
_TEXT ENDS
|
||||
FLAT GROUP _DATA, CONST, _BSS
|
||||
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
|
||||
endif
|
||||
PUBLIC ?fieldFunction@@3PAU_jfieldID@@A ; fieldFunction
|
||||
PUBLIC ?fieldModule@@3PAU_jfieldID@@A ; fieldModule
|
||||
PUBLIC ?fieldFunctionHandle@@3PAU_jfieldID@@A ; fieldFunctionHandle
|
||||
PUBLIC ?fieldModuleHandle@@3PAU_jfieldID@@A ; fieldModuleHandle
|
||||
PUBLIC ?fieldLastErrorCode@@3PAU_jfieldID@@A ; fieldLastErrorCode
|
||||
PUBLIC ?fieldHolderO@@3PAU_jfieldID@@A ; fieldHolderO
|
||||
PUBLIC ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
PUBLIC ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
PUBLIC ?classString@@3PAV_jclass@@A ; classString
|
||||
PUBLIC ?classByteArray@@3PAV_jclass@@A ; classByteArray
|
||||
PUBLIC ?classCharArray@@3PAV_jclass@@A ; classCharArray
|
||||
PUBLIC ?classHolder@@3PAV_jclass@@A ; classHolder
|
||||
PUBLIC ?methodBooleanValue@@3PAU_jmethodID@@A ; methodBooleanValue
|
||||
PUBLIC ?methodIntValue@@3PAU_jmethodID@@A ; methodIntValue
|
||||
PUBLIC ?newIntegerInt@@3PAU_jmethodID@@A ; newIntegerInt
|
||||
PUBLIC ?newBooleanBoolean@@3PAU_jmethodID@@A ; newBooleanBoolean
|
||||
_BSS SEGMENT
|
||||
?fieldFunction@@3PAU_jfieldID@@A DD 01H DUP (?) ; fieldFunction
|
||||
?fieldModule@@3PAU_jfieldID@@A DD 01H DUP (?) ; fieldModule
|
||||
?fieldFunctionHandle@@3PAU_jfieldID@@A DD 01H DUP (?) ; fieldFunctionHandle
|
||||
?fieldModuleHandle@@3PAU_jfieldID@@A DD 01H DUP (?) ; fieldModuleHandle
|
||||
?fieldLastErrorCode@@3PAU_jfieldID@@A DD 01H DUP (?) ; fieldLastErrorCode
|
||||
?fieldHolderO@@3PAU_jfieldID@@A DD 01H DUP (?) ; fieldHolderO
|
||||
?classBoolean@@3PAV_jclass@@A DD 01H DUP (?) ; classBoolean
|
||||
?classInteger@@3PAV_jclass@@A DD 01H DUP (?) ; classInteger
|
||||
?classString@@3PAV_jclass@@A DD 01H DUP (?) ; classString
|
||||
?classByteArray@@3PAV_jclass@@A DD 01H DUP (?) ; classByteArray
|
||||
?classCharArray@@3PAV_jclass@@A DD 01H DUP (?) ; classCharArray
|
||||
?classHolder@@3PAV_jclass@@A DD 01H DUP (?) ; classHolder
|
||||
?methodBooleanValue@@3PAU_jmethodID@@A DD 01H DUP (?) ; methodBooleanValue
|
||||
?methodIntValue@@3PAU_jmethodID@@A DD 01H DUP (?) ; methodIntValue
|
||||
?newIntegerInt@@3PAU_jmethodID@@A DD 01H DUP (?) ; newIntegerInt
|
||||
?newBooleanBoolean@@3PAU_jmethodID@@A DD 01H DUP (?) ; newBooleanBoolean
|
||||
_BSS ENDS
|
||||
PUBLIC ??_C@_0BD@DFD@Ljava?1lang?1String?$DL?$AA@ ; `string'
|
||||
PUBLIC ??_C@_08JJOG@function?$AA@ ; `string'
|
||||
PUBLIC ??_C@_06CODG@module?$AA@ ; `string'
|
||||
PUBLIC ??_C@_01FLOP@I?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0P@LKIL@functionHandle?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0N@EFAA@moduleHandle?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0O@OMHL@lastErrorCode?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0BL@DALH@com?1eaio?1nativecall?1Holder?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0BD@GEDI@Ljava?1lang?1Object?$DL?$AA@ ; `string'
|
||||
PUBLIC ??_C@_01PGHN@o?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0BC@IGNJ@java?1lang?1Boolean?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0BC@FBKL@java?1lang?1Integer?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0BB@LLFN@java?1lang?1String?$AA@ ; `string'
|
||||
PUBLIC ??_C@_02LOEJ@?$FLB?$AA@ ; `string'
|
||||
PUBLIC ??_C@_02BENO@?$FLC?$AA@ ; `string'
|
||||
PUBLIC ??_C@_03KJOK@?$CI?$CJZ?$AA@ ; `string'
|
||||
PUBLIC ??_C@_0N@KEBP@booleanValue?$AA@ ; `string'
|
||||
PUBLIC ??_C@_03PPCD@?$CI?$CJI?$AA@ ; `string'
|
||||
PUBLIC ??_C@_08JCMA@intValue?$AA@ ; `string'
|
||||
PUBLIC ??_C@_04ECLF@?$CII?$CJV?$AA@ ; `string'
|
||||
PUBLIC ??_C@_06KILP@?$DMinit?$DO?$AA@ ; `string'
|
||||
PUBLIC ??_C@_04JFOE@?$CIZ?$CJV?$AA@ ; `string'
|
||||
PUBLIC _Java_com_eaio_nativecall_NativeCall_initIDs@8
|
||||
; COMDAT ??_C@_0BD@DFD@Ljava?1lang?1String?$DL?$AA@
|
||||
; File C:\Program Files\IBMJava13\include\jni.h
|
||||
_DATA SEGMENT
|
||||
??_C@_0BD@DFD@Ljava?1lang?1String?$DL?$AA@ DB 'Ljava/lang/String;', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_08JJOG@function?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_08JJOG@function?$AA@ DB 'function', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_06CODG@module?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_06CODG@module?$AA@ DB 'module', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_01FLOP@I?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_01FLOP@I?$AA@ DB 'I', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0P@LKIL@functionHandle?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0P@LKIL@functionHandle?$AA@ DB 'functionHandle', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0N@EFAA@moduleHandle?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0N@EFAA@moduleHandle?$AA@ DB 'moduleHandle', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0O@OMHL@lastErrorCode?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0O@OMHL@lastErrorCode?$AA@ DB 'lastErrorCode', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BL@DALH@com?1eaio?1nativecall?1Holder?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0BL@DALH@com?1eaio?1nativecall?1Holder?$AA@ DB 'com/eaio/nativecall'
|
||||
DB '/Holder', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BD@GEDI@Ljava?1lang?1Object?$DL?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0BD@GEDI@Ljava?1lang?1Object?$DL?$AA@ DB 'Ljava/lang/Object;', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_01PGHN@o?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_01PGHN@o?$AA@ DB 'o', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BC@IGNJ@java?1lang?1Boolean?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0BC@IGNJ@java?1lang?1Boolean?$AA@ DB 'java/lang/Boolean', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BC@FBKL@java?1lang?1Integer?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0BC@FBKL@java?1lang?1Integer?$AA@ DB 'java/lang/Integer', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0BB@LLFN@java?1lang?1String?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0BB@LLFN@java?1lang?1String?$AA@ DB 'java/lang/String', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_02LOEJ@?$FLB?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_02LOEJ@?$FLB?$AA@ DB '[B', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_02BENO@?$FLC?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_02BENO@?$FLC?$AA@ DB '[C', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_03KJOK@?$CI?$CJZ?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_03KJOK@?$CI?$CJZ?$AA@ DB '()Z', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_0N@KEBP@booleanValue?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_0N@KEBP@booleanValue?$AA@ DB 'booleanValue', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_03PPCD@?$CI?$CJI?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_03PPCD@?$CI?$CJI?$AA@ DB '()I', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_08JCMA@intValue?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_08JCMA@intValue?$AA@ DB 'intValue', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_04ECLF@?$CII?$CJV?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_04ECLF@?$CII?$CJV?$AA@ DB '(I)V', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_06KILP@?$DMinit?$DO?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_06KILP@?$DMinit?$DO?$AA@ DB '<init>', 00H ; `string'
|
||||
_DATA ENDS
|
||||
; COMDAT ??_C@_04JFOE@?$CIZ?$CJV?$AA@
|
||||
_DATA SEGMENT
|
||||
??_C@_04JFOE@?$CIZ?$CJV?$AA@ DB '(Z)V', 00H ; `string'
|
||||
_DATA ENDS
|
||||
_TEXT SEGMENT
|
||||
_env$ = 8
|
||||
_cls$ = 12
|
||||
_Java_com_eaio_nativecall_NativeCall_initIDs@8 PROC NEAR
|
||||
|
||||
; 71 : (JNIEnv *env, jclass cls) {
|
||||
|
||||
push ebx
|
||||
|
||||
; 72 :
|
||||
; 73 : // NativeCall fields
|
||||
; 74 :
|
||||
; 75 : fieldFunction = env->GetFieldID(cls, "function", "Ljava/lang/String;");
|
||||
|
||||
mov ebx, DWORD PTR _cls$[esp]
|
||||
push esi
|
||||
mov esi, DWORD PTR _env$[esp+4]
|
||||
push edi
|
||||
mov edi, OFFSET FLAT:??_C@_0BD@DFD@Ljava?1lang?1String?$DL?$AA@ ; `string'
|
||||
mov eax, DWORD PTR [esi]
|
||||
push edi
|
||||
push OFFSET FLAT:??_C@_08JJOG@function?$AA@ ; `string'
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+376]
|
||||
|
||||
; 76 : fieldModule = env->GetFieldID(cls, "module", "Ljava/lang/String;");
|
||||
|
||||
push edi
|
||||
mov DWORD PTR ?fieldFunction@@3PAU_jfieldID@@A, eax ; fieldFunction
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_06CODG@module?$AA@ ; `string'
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+376]
|
||||
|
||||
; 77 :
|
||||
; 78 : fieldFunctionHandle = env->GetFieldID(cls, "functionHandle", "I");
|
||||
|
||||
mov edi, OFFSET FLAT:??_C@_01FLOP@I?$AA@ ; `string'
|
||||
mov DWORD PTR ?fieldModule@@3PAU_jfieldID@@A, eax ; fieldModule
|
||||
mov eax, DWORD PTR [esi]
|
||||
push edi
|
||||
push OFFSET FLAT:??_C@_0P@LKIL@functionHandle?$AA@ ; `string'
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+376]
|
||||
|
||||
; 79 : fieldModuleHandle = env-> GetFieldID(cls, "moduleHandle", "I");
|
||||
|
||||
push edi
|
||||
mov DWORD PTR ?fieldFunctionHandle@@3PAU_jfieldID@@A, eax ; fieldFunctionHandle
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0N@EFAA@moduleHandle?$AA@ ; `string'
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+376]
|
||||
|
||||
; 80 :
|
||||
; 81 : fieldLastErrorCode = env->GetFieldID(cls, "lastErrorCode", "I");
|
||||
|
||||
push edi
|
||||
mov DWORD PTR ?fieldModuleHandle@@3PAU_jfieldID@@A, eax ; fieldModuleHandle
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0O@OMHL@lastErrorCode?$AA@ ; `string'
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+376]
|
||||
mov DWORD PTR ?fieldLastErrorCode@@3PAU_jfieldID@@A, eax ; fieldLastErrorCode
|
||||
|
||||
; 82 :
|
||||
; 83 : // Holder fields
|
||||
; 84 :
|
||||
; 85 : classHolder = (jclass) env->NewGlobalRef(env->FindClass("com/eaio/nativecall/Holder"));
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0BL@DALH@com?1eaio?1nativecall?1Holder?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+84]
|
||||
|
||||
; 86 : fieldHolderO = env->GetFieldID(classHolder, "o", "Ljava/lang/Object;");
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0BD@GEDI@Ljava?1lang?1Object?$DL?$AA@ ; `string'
|
||||
push OFFSET FLAT:??_C@_01PGHN@o?$AA@ ; `string'
|
||||
push eax
|
||||
push esi
|
||||
mov DWORD PTR ?classHolder@@3PAV_jclass@@A, eax ; classHolder
|
||||
call DWORD PTR [ecx+376]
|
||||
mov DWORD PTR ?fieldHolderO@@3PAU_jfieldID@@A, eax ; fieldHolderO
|
||||
|
||||
; 87 :
|
||||
; 88 : // Other classes
|
||||
; 89 :
|
||||
; 90 : classBoolean = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Boolean"));
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0BC@IGNJ@java?1lang?1Boolean?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+84]
|
||||
mov DWORD PTR ?classBoolean@@3PAV_jclass@@A, eax ; classBoolean
|
||||
|
||||
; 91 : /*classByte = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Byte"));
|
||||
; 92 : classCharacter = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Character"));
|
||||
; 93 : classShort = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Short"));*/
|
||||
; 94 : classInteger = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Integer"));
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0BC@FBKL@java?1lang?1Integer?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+84]
|
||||
mov DWORD PTR ?classInteger@@3PAV_jclass@@A, eax ; classInteger
|
||||
|
||||
; 95 : /*classLong = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Long"));
|
||||
; 96 : classFloat = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Float"));
|
||||
; 97 : classDouble = (jclass) env->NewGlobalRef(env->FindClass("java/lang/Double"));*/
|
||||
; 98 : classString = (jclass) env->NewGlobalRef(env->FindClass("java/lang/String"));
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_0BB@LLFN@java?1lang?1String?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+84]
|
||||
mov DWORD PTR ?classString@@3PAV_jclass@@A, eax ; classString
|
||||
|
||||
; 99 : classByteArray = (jclass) env->NewGlobalRef(env->FindClass("[B"));
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_02LOEJ@?$FLB?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+84]
|
||||
mov DWORD PTR ?classByteArray@@3PAV_jclass@@A, eax ; classByteArray
|
||||
|
||||
; 100 : classCharArray = (jclass) env->NewGlobalRef(env->FindClass("[C"));
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push OFFSET FLAT:??_C@_02BENO@?$FLC?$AA@ ; `string'
|
||||
push esi
|
||||
call DWORD PTR [eax+24]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+84]
|
||||
|
||||
; 101 : /*classIntArray = (jclass) env->NewGlobalRef(env->FindClass("[I"));*/
|
||||
; 102 :
|
||||
; 103 : // Wrapper class methods
|
||||
; 104 :
|
||||
; 105 : methodBooleanValue = env->GetMethodID(classBoolean,
|
||||
; 106 : "booleanValue", "()Z");
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov DWORD PTR ?classCharArray@@3PAV_jclass@@A, eax ; classCharArray
|
||||
mov eax, DWORD PTR ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
push OFFSET FLAT:??_C@_03KJOK@?$CI?$CJZ?$AA@ ; `string'
|
||||
push OFFSET FLAT:??_C@_0N@KEBP@booleanValue?$AA@ ; `string'
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+132]
|
||||
|
||||
; 107 : /*methodByteValue = env->GetMethodID(classByte,
|
||||
; 108 : "byteValue", "()B");
|
||||
; 109 : methodCharValue = env->GetMethodID(classCharacter,
|
||||
; 110 : "charValue", "()C");
|
||||
; 111 : methodShortValue = env->GetMethodID(classShort,
|
||||
; 112 : "shortValue", "()S");*/
|
||||
; 113 : methodIntValue = env->GetMethodID(classInteger,
|
||||
; 114 : "intValue", "()I");
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov DWORD PTR ?methodBooleanValue@@3PAU_jmethodID@@A, eax ; methodBooleanValue
|
||||
mov eax, DWORD PTR ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
push OFFSET FLAT:??_C@_03PPCD@?$CI?$CJI?$AA@ ; `string'
|
||||
push OFFSET FLAT:??_C@_08JCMA@intValue?$AA@ ; `string'
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+132]
|
||||
|
||||
; 115 : /*methodLongValue = env->GetMethodID(classLong,
|
||||
; 116 : "longValue", "()J");
|
||||
; 117 : methodFloatValue = env->GetMethodID(classFloat,
|
||||
; 118 : "floatValue", "()F");
|
||||
; 119 : methodDoubleValue = env->GetMethodID(classDouble,
|
||||
; 120 : "doubleValue", "()D");*/
|
||||
; 121 :
|
||||
; 122 : // Constructors
|
||||
; 123 :
|
||||
; 124 : newIntegerInt = env->GetMethodID(classInteger, "<init>", "(I)V");
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov DWORD PTR ?methodIntValue@@3PAU_jmethodID@@A, eax ; methodIntValue
|
||||
mov eax, DWORD PTR ?classInteger@@3PAV_jclass@@A ; classInteger
|
||||
mov edi, OFFSET FLAT:??_C@_06KILP@?$DMinit?$DO?$AA@ ; `string'
|
||||
push OFFSET FLAT:??_C@_04ECLF@?$CII?$CJV?$AA@ ; `string'
|
||||
push edi
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+132]
|
||||
|
||||
; 125 : newBooleanBoolean = env->GetMethodID(classBoolean, "<init>", "(Z)V");
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov DWORD PTR ?newIntegerInt@@3PAU_jmethodID@@A, eax ; newIntegerInt
|
||||
mov eax, DWORD PTR ?classBoolean@@3PAV_jclass@@A ; classBoolean
|
||||
push OFFSET FLAT:??_C@_04JFOE@?$CIZ?$CJV?$AA@ ; `string'
|
||||
push edi
|
||||
push eax
|
||||
push esi
|
||||
call DWORD PTR [ecx+132]
|
||||
pop edi
|
||||
pop esi
|
||||
mov DWORD PTR ?newBooleanBoolean@@3PAU_jmethodID@@A, eax ; newBooleanBoolean
|
||||
pop ebx
|
||||
|
||||
; 126 :
|
||||
; 127 : }
|
||||
|
||||
ret 8
|
||||
_Java_com_eaio_nativecall_NativeCall_initIDs@8 ENDP
|
||||
_TEXT ENDS
|
||||
PUBLIC _Java_com_eaio_nativecall_NativeCall_initHandles@8
|
||||
EXTRN __imp__LoadLibraryA@4:NEAR
|
||||
EXTRN __imp__GetLastError@0:NEAR
|
||||
EXTRN __imp__FreeLibrary@4:NEAR
|
||||
EXTRN __imp__GetProcAddress@8:NEAR
|
||||
_TEXT SEGMENT
|
||||
_env$ = 8
|
||||
_obj$ = 12
|
||||
_out$ = -1
|
||||
_moduleNameS$ = 12
|
||||
_functionNameS$ = -12
|
||||
_moduleName$ = 8
|
||||
_functionName$ = -8
|
||||
_addr$27794 = -16
|
||||
_Java_com_eaio_nativecall_NativeCall_initHandles@8 PROC NEAR
|
||||
|
||||
; 135 : (JNIEnv *env, jobject obj) {
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
sub esp, 16 ; 00000010H
|
||||
|
||||
; 136 :
|
||||
; 137 : bool out = JNI_TRUE;
|
||||
; 138 :
|
||||
; 139 : jstring moduleNameS = (jstring) env->GetObjectField(obj, fieldModule);
|
||||
|
||||
mov eax, DWORD PTR ?fieldModule@@3PAU_jfieldID@@A ; fieldModule
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, DWORD PTR _env$[ebp]
|
||||
push edi
|
||||
mov edi, DWORD PTR _obj$[ebp]
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
mov BYTE PTR _out$[ebp], 1
|
||||
call DWORD PTR [ecx+380]
|
||||
|
||||
; 140 : jstring functionNameS = (jstring) env->GetObjectField(obj, fieldFunction);
|
||||
|
||||
mov ecx, DWORD PTR [esi]
|
||||
mov DWORD PTR _moduleNameS$[ebp], eax
|
||||
mov eax, DWORD PTR ?fieldFunction@@3PAU_jfieldID@@A ; fieldFunction
|
||||
push eax
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+380]
|
||||
|
||||
; 141 :
|
||||
; 142 : const char* moduleName = env->GetStringUTFChars(moduleNameS, 0);
|
||||
|
||||
push 0
|
||||
mov DWORD PTR _functionNameS$[ebp], eax
|
||||
push DWORD PTR _moduleNameS$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push esi
|
||||
call DWORD PTR [eax+676]
|
||||
|
||||
; 143 : const char* functionName = env->GetStringUTFChars(functionNameS, 0);
|
||||
|
||||
push 0
|
||||
mov DWORD PTR _moduleName$[ebp], eax
|
||||
push DWORD PTR _functionNameS$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push esi
|
||||
call DWORD PTR [eax+676]
|
||||
|
||||
; 144 :
|
||||
; 145 : #ifdef _WINDOWS
|
||||
; 146 :
|
||||
; 147 : HMODULE mod = LoadLibrary(moduleName);
|
||||
|
||||
push DWORD PTR _moduleName$[ebp]
|
||||
mov DWORD PTR _functionName$[ebp], eax
|
||||
call DWORD PTR __imp__LoadLibraryA@4
|
||||
mov ebx, eax
|
||||
|
||||
; 148 :
|
||||
; 149 : if (mod == NULL) {
|
||||
|
||||
test ebx, ebx
|
||||
jne SHORT $L27792
|
||||
$L27990:
|
||||
|
||||
; 150 : /* no such module or DllMain returned FALSE */
|
||||
; 151 : 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 edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+436]
|
||||
|
||||
; 152 : out = JNI_FALSE;
|
||||
|
||||
and BYTE PTR _out$[ebp], 0
|
||||
|
||||
; 153 : }
|
||||
; 154 : else {
|
||||
|
||||
jmp SHORT $L27982
|
||||
$L27792:
|
||||
|
||||
; 155 : FARPROC addr = GetProcAddress(mod, functionName);
|
||||
|
||||
push DWORD PTR _functionName$[ebp]
|
||||
push ebx
|
||||
call DWORD PTR __imp__GetProcAddress@8
|
||||
|
||||
; 156 : if (addr == NULL) {
|
||||
|
||||
test eax, eax
|
||||
mov DWORD PTR _addr$27794[ebp], eax
|
||||
jne SHORT $L27795
|
||||
|
||||
; 157 : /* function not found */
|
||||
; 158 : FreeLibrary(mod);
|
||||
|
||||
push ebx
|
||||
call DWORD PTR __imp__FreeLibrary@4
|
||||
|
||||
; 159 : env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
; 160 : out = JNI_FALSE;
|
||||
; 161 : }
|
||||
; 162 : else {
|
||||
|
||||
jmp SHORT $L27990
|
||||
$L27795:
|
||||
|
||||
; 163 : /* all ok */
|
||||
; 164 : env->SetIntField(obj, fieldModuleHandle, (jint) mod);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push ebx
|
||||
push DWORD PTR ?fieldModuleHandle@@3PAU_jfieldID@@A ; fieldModuleHandle
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [eax+436]
|
||||
|
||||
; 165 : env->SetIntField(obj, fieldFunctionHandle, (jint) addr);
|
||||
|
||||
push DWORD PTR _addr$27794[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push DWORD PTR ?fieldFunctionHandle@@3PAU_jfieldID@@A ; fieldFunctionHandle
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [eax+436]
|
||||
$L27982:
|
||||
|
||||
; 166 : }
|
||||
; 167 : }
|
||||
; 168 :
|
||||
; 169 : #endif
|
||||
; 170 :
|
||||
; 171 : env->ReleaseStringUTFChars(moduleNameS, moduleName);
|
||||
|
||||
push DWORD PTR _moduleName$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push DWORD PTR _moduleNameS$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [eax+680]
|
||||
|
||||
; 172 : env->ReleaseStringUTFChars(functionNameS, functionName);
|
||||
|
||||
push DWORD PTR _functionName$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push DWORD PTR _functionNameS$[ebp]
|
||||
push esi
|
||||
call DWORD PTR [eax+680]
|
||||
|
||||
; 173 :
|
||||
; 174 : return out;
|
||||
|
||||
mov al, BYTE PTR _out$[ebp]
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
|
||||
; 175 :
|
||||
; 176 : }
|
||||
|
||||
leave
|
||||
ret 8
|
||||
_Java_com_eaio_nativecall_NativeCall_initHandles@8 ENDP
|
||||
_TEXT ENDS
|
||||
PUBLIC _Java_com_eaio_nativecall_NativeCall_getLastError@8
|
||||
EXTRN __imp__FormatMessageA@28:NEAR
|
||||
EXTRN __imp__LocalFree@4:NEAR
|
||||
_TEXT SEGMENT
|
||||
_env$ = 8
|
||||
_obj$ = 12
|
||||
_msgBufPtr$ = 8
|
||||
_Java_com_eaio_nativecall_NativeCall_getLastError@8 PROC NEAR
|
||||
|
||||
; 184 : (JNIEnv *env, jobject obj) {
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
; 185 :
|
||||
; 186 : jint lastError = env->GetIntField(obj, fieldLastErrorCode);
|
||||
|
||||
mov eax, DWORD PTR ?fieldLastErrorCode@@3PAU_jfieldID@@A ; fieldLastErrorCode
|
||||
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]
|
||||
|
||||
; 187 :
|
||||
; 188 : if (lastError == 0) return NULL;
|
||||
|
||||
xor ecx, ecx
|
||||
cmp eax, ecx
|
||||
jne SHORT $L27804
|
||||
xor eax, eax
|
||||
jmp SHORT $L27802
|
||||
$L27804:
|
||||
|
||||
; 189 :
|
||||
; 190 : jstring out = NULL;
|
||||
; 191 :
|
||||
; 192 : #ifdef _WINDOWS
|
||||
; 193 :
|
||||
; 194 : LPVOID msgBufPtr = NULL;
|
||||
; 195 : FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
; 196 : FORMAT_MESSAGE_FROM_SYSTEM, NULL, lastError, 0,
|
||||
; 197 : (LPSTR) &msgBufPtr, 0, NULL);
|
||||
|
||||
push ecx
|
||||
lea edx, DWORD PTR _msgBufPtr$[ebp]
|
||||
push ecx
|
||||
push edx
|
||||
push ecx
|
||||
push eax
|
||||
push ecx
|
||||
push 4352 ; 00001100H
|
||||
mov DWORD PTR _msgBufPtr$[ebp], ecx
|
||||
call DWORD PTR __imp__FormatMessageA@28
|
||||
|
||||
; 198 :
|
||||
; 199 : out = env->NewStringUTF((char*) msgBufPtr);
|
||||
|
||||
push DWORD PTR _msgBufPtr$[ebp]
|
||||
mov eax, DWORD PTR [esi]
|
||||
push esi
|
||||
call DWORD PTR [eax+668]
|
||||
|
||||
; 200 :
|
||||
; 201 : LocalFree(msgBufPtr);
|
||||
|
||||
push DWORD PTR _msgBufPtr$[ebp]
|
||||
mov esi, eax
|
||||
call DWORD PTR __imp__LocalFree@4
|
||||
|
||||
; 202 :
|
||||
; 203 : #endif
|
||||
; 204 :
|
||||
; 205 : return out;
|
||||
|
||||
mov eax, esi
|
||||
$L27802:
|
||||
pop esi
|
||||
|
||||
; 206 :
|
||||
; 207 : }
|
||||
|
||||
pop ebp
|
||||
ret 8
|
||||
_Java_com_eaio_nativecall_NativeCall_getLastError@8 ENDP
|
||||
_TEXT ENDS
|
||||
PUBLIC _Java_com_eaio_nativecall_NativeCall_destroy@8
|
||||
_TEXT SEGMENT
|
||||
_env$ = 8
|
||||
_obj$ = 12
|
||||
_Java_com_eaio_nativecall_NativeCall_destroy@8 PROC NEAR
|
||||
|
||||
; 216 :
|
||||
; 217 : jint module = env->GetIntField(obj, fieldModuleHandle);
|
||||
|
||||
mov eax, DWORD PTR ?fieldModuleHandle@@3PAU_jfieldID@@A ; fieldModuleHandle
|
||||
push esi
|
||||
mov esi, DWORD PTR _env$[esp]
|
||||
push edi
|
||||
mov edi, DWORD PTR _obj$[esp+4]
|
||||
push eax
|
||||
mov ecx, DWORD PTR [esi]
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+400]
|
||||
|
||||
; 218 :
|
||||
; 219 : if (module == 0) return;
|
||||
|
||||
test eax, eax
|
||||
je SHORT $L28016
|
||||
|
||||
; 220 :
|
||||
; 221 : #ifdef _WINDOWS
|
||||
; 222 :
|
||||
; 223 : if (FreeLibrary((HMODULE) module) == 0) {
|
||||
|
||||
push eax
|
||||
call DWORD PTR __imp__FreeLibrary@4
|
||||
test eax, eax
|
||||
jne SHORT $L28007
|
||||
|
||||
; 224 : 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 edi
|
||||
push esi
|
||||
call DWORD PTR [ecx+436]
|
||||
$L28007:
|
||||
|
||||
; 225 : }
|
||||
; 226 :
|
||||
; 227 : #endif
|
||||
; 228 :
|
||||
; 229 : env->SetIntField(obj, fieldModuleHandle, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push DWORD PTR ?fieldModuleHandle@@3PAU_jfieldID@@A ; fieldModuleHandle
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [eax+436]
|
||||
|
||||
; 230 : env->SetIntField(obj, fieldFunctionHandle, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push DWORD PTR ?fieldFunctionHandle@@3PAU_jfieldID@@A ; fieldFunctionHandle
|
||||
push edi
|
||||
push esi
|
||||
call DWORD PTR [eax+436]
|
||||
$L28016:
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
; 231 :
|
||||
; 232 : return;
|
||||
; 233 :
|
||||
; 234 : }
|
||||
|
||||
ret 8
|
||||
_Java_com_eaio_nativecall_NativeCall_destroy@8 ENDP
|
||||
_TEXT ENDS
|
||||
END
|
||||
BIN
cpp/nativecall/Release/NativeCall.dll
Normal file
BIN
cpp/nativecall/Release/NativeCall.dll
Normal file
Binary file not shown.
101
cpp/nativecall/Release/NativeCall.map
Normal file
101
cpp/nativecall/Release/NativeCall.map
Normal file
@@ -0,0 +1,101 @@
|
||||
NativeCall
|
||||
|
||||
Timestamp is 44472064 (Thu Apr 20 07:47:16 2006)
|
||||
|
||||
Preferred load address is 10000000
|
||||
|
||||
Start Length Name Class
|
||||
0001:00000000 00000028H .idata$5 CODE
|
||||
0001:00000030 00000d1eH .text CODE
|
||||
0001:00000d50 00000014H .idata$2 CODE
|
||||
0001:00000d64 00000014H .idata$3 CODE
|
||||
0001:00000d78 00000028H .idata$4 CODE
|
||||
0001:00000da0 00000096H .idata$6 CODE
|
||||
0001:00000e40 00000212H .edata CODE
|
||||
0002:00000000 00000004H .CRT$XCA DATA
|
||||
0002:00000004 00000004H .CRT$XCZ DATA
|
||||
0002:00000010 00000130H .data DATA
|
||||
0002:00000140 0000004cH .bss DATA
|
||||
0003:00000000 00000058H .rsrc$01 DATA
|
||||
0003:00000060 000002b0H .rsrc$02 DATA
|
||||
|
||||
Address Publics by Value Rva+Base Lib:Object
|
||||
|
||||
0001:00000000 __imp__FormatMessageA@28 10001000 kernel32:KERNEL32.dll
|
||||
0001:00000004 __imp__FreeLibrary@4 10001004 kernel32:KERNEL32.dll
|
||||
0001:00000008 __imp__GetProcAddress@8 10001008 kernel32:KERNEL32.dll
|
||||
0001:0000000c __imp__LoadLibraryA@4 1000100c kernel32:KERNEL32.dll
|
||||
0001:00000010 __imp__LocalFree@4 10001010 kernel32:KERNEL32.dll
|
||||
0001:00000014 __imp__GetLastError@0 10001014 kernel32:KERNEL32.dll
|
||||
0001:00000018 __imp__HeapAlloc@12 10001018 kernel32:KERNEL32.dll
|
||||
0001:0000001c __imp__GetProcessHeap@0 1000101c kernel32:KERNEL32.dll
|
||||
0001:00000020 __imp__HeapFree@12 10001020 kernel32:KERNEL32.dll
|
||||
0001:00000024 \177KERNEL32_NULL_THUNK_DATA 10001024 kernel32:KERNEL32.dll
|
||||
0001:00000030 _Java_com_eaio_nativecall_IntCall_executeCall@8 10001030 f IntCall.obj
|
||||
0001:00000074 _Java_com_eaio_nativecall_IntCall_executeCall0@12 10001074 f IntCall.obj
|
||||
0001:0000045e ?NewObject@JNIEnv_@@QAAPAV_jobject@@PAV_jclass@@PAU_jmethodID@@ZZ 1000145e f i IntCall.obj
|
||||
0001:00000476 ?CallBooleanMethod@JNIEnv_@@QAAEPAV_jobject@@PAU_jmethodID@@ZZ 10001476 f i IntCall.obj
|
||||
0001:00000491 ?CallIntMethod@JNIEnv_@@QAAJPAV_jobject@@PAU_jmethodID@@ZZ 10001491 f i IntCall.obj
|
||||
0001:000004ac _Java_com_eaio_nativecall_NativeCall_initIDs@8 100014ac f NativeCall.obj
|
||||
0001:00000648 _Java_com_eaio_nativecall_NativeCall_initHandles@8 10001648 f NativeCall.obj
|
||||
0001:00000735 _Java_com_eaio_nativecall_NativeCall_getLastError@8 10001735 f NativeCall.obj
|
||||
0001:0000078d _Java_com_eaio_nativecall_NativeCall_destroy@8 1000178d f NativeCall.obj
|
||||
0001:000007f6 _Java_com_eaio_nativecall_VoidCall_executeCall@8 100017f6 f VoidCall.obj
|
||||
0001:00000833 _Java_com_eaio_nativecall_VoidCall_executeCall0@12 10001833 f VoidCall.obj
|
||||
0001:00000c15 ??2@YAPAXI@Z 10001c15 f libctiny:NEWDEL.OBJ
|
||||
0001:00000c29 ??3@YAXPAX@Z 10001c29 f libctiny:NEWDEL.OBJ
|
||||
0001:00000c3d __DllMainCRTStartup@12 10001c3d f libctiny:DLLCRT0.OBJ
|
||||
0001:00000c7f ?_initterm@@YAXPAP6AXXZ0@Z 10001c7f f libctiny:INITTERM.OBJ
|
||||
0001:00000c99 ?_atexit_init@@YAXXZ 10001c99 f libctiny:INITTERM.OBJ
|
||||
0001:00000cb1 ?_DoExit@@YAXXZ 10001cb1 f libctiny:INITTERM.OBJ
|
||||
0001:00000ccd _calloc 10001ccd f libctiny:ALLOC2.OBJ
|
||||
0001:00000cf0 _memset 10001cf0 f libcmt:memset.obj
|
||||
0001:00000d48 _DllMain@12 10001d48 f libcmt:dllmain.obj
|
||||
0001:00000d50 __IMPORT_DESCRIPTOR_KERNEL32 10001d50 kernel32:KERNEL32.dll
|
||||
0001:00000d64 __NULL_IMPORT_DESCRIPTOR 10001d64 kernel32:KERNEL32.dll
|
||||
0002:00000000 ?__xc_a@@3PAP6AXXZA 10003000 libctiny:INITTERM.OBJ
|
||||
0002:00000004 ?__xc_z@@3PAP6AXXZA 10003004 libctiny:INITTERM.OBJ
|
||||
0002:00000010 ??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@ 10003010 IntCall.obj
|
||||
0002:0000002c ??_C@_04JFOE@?$CIZ?$CJV?$AA@ 1000302c NativeCall.obj
|
||||
0002:00000034 ??_C@_04ECLF@?$CII?$CJV?$AA@ 10003034 NativeCall.obj
|
||||
0002:0000003c ??_C@_06KILP@?$DMinit?$DO?$AA@ 1000303c NativeCall.obj
|
||||
0002:00000044 ??_C@_08JCMA@intValue?$AA@ 10003044 NativeCall.obj
|
||||
0002:00000050 ??_C@_03PPCD@?$CI?$CJI?$AA@ 10003050 NativeCall.obj
|
||||
0002:00000054 ??_C@_0N@KEBP@booleanValue?$AA@ 10003054 NativeCall.obj
|
||||
0002:00000064 ??_C@_03KJOK@?$CI?$CJZ?$AA@ 10003064 NativeCall.obj
|
||||
0002:00000068 ??_C@_02BENO@?$FLC?$AA@ 10003068 NativeCall.obj
|
||||
0002:0000006c ??_C@_02LOEJ@?$FLB?$AA@ 1000306c NativeCall.obj
|
||||
0002:00000070 ??_C@_0BB@LLFN@java?1lang?1String?$AA@ 10003070 NativeCall.obj
|
||||
0002:00000084 ??_C@_0BC@FBKL@java?1lang?1Integer?$AA@ 10003084 NativeCall.obj
|
||||
0002:00000098 ??_C@_0BC@IGNJ@java?1lang?1Boolean?$AA@ 10003098 NativeCall.obj
|
||||
0002:000000ac ??_C@_01PGHN@o?$AA@ 100030ac NativeCall.obj
|
||||
0002:000000b0 ??_C@_0BD@GEDI@Ljava?1lang?1Object?$DL?$AA@ 100030b0 NativeCall.obj
|
||||
0002:000000c4 ??_C@_0BL@DALH@com?1eaio?1nativecall?1Holder?$AA@ 100030c4 NativeCall.obj
|
||||
0002:000000e0 ??_C@_0O@OMHL@lastErrorCode?$AA@ 100030e0 NativeCall.obj
|
||||
0002:000000f0 ??_C@_0N@EFAA@moduleHandle?$AA@ 100030f0 NativeCall.obj
|
||||
0002:00000100 ??_C@_0P@LKIL@functionHandle?$AA@ 10003100 NativeCall.obj
|
||||
0002:00000110 ??_C@_01FLOP@I?$AA@ 10003110 NativeCall.obj
|
||||
0002:00000114 ??_C@_06CODG@module?$AA@ 10003114 NativeCall.obj
|
||||
0002:0000011c ??_C@_08JJOG@function?$AA@ 1000311c NativeCall.obj
|
||||
0002:00000128 ??_C@_0BD@DFD@Ljava?1lang?1String?$DL?$AA@ 10003128 NativeCall.obj
|
||||
0002:00000140 ?classString@@3PAV_jclass@@A 10003140 NativeCall.obj
|
||||
0002:00000144 ?fieldFunctionHandle@@3PAU_jfieldID@@A 10003144 NativeCall.obj
|
||||
0002:00000148 ?newIntegerInt@@3PAU_jmethodID@@A 10003148 NativeCall.obj
|
||||
0002:0000014c ?classCharArray@@3PAV_jclass@@A 1000314c NativeCall.obj
|
||||
0002:00000150 ?fieldFunction@@3PAU_jfieldID@@A 10003150 NativeCall.obj
|
||||
0002:00000154 ?classInteger@@3PAV_jclass@@A 10003154 NativeCall.obj
|
||||
0002:00000158 ?newBooleanBoolean@@3PAU_jmethodID@@A 10003158 NativeCall.obj
|
||||
0002:0000015c ?classBoolean@@3PAV_jclass@@A 1000315c NativeCall.obj
|
||||
0002:00000160 ?fieldModule@@3PAU_jfieldID@@A 10003160 NativeCall.obj
|
||||
0002:00000164 ?fieldModuleHandle@@3PAU_jfieldID@@A 10003164 NativeCall.obj
|
||||
0002:00000168 ?classHolder@@3PAV_jclass@@A 10003168 NativeCall.obj
|
||||
0002:0000016c ?fieldLastErrorCode@@3PAU_jfieldID@@A 1000316c NativeCall.obj
|
||||
0002:00000170 ?classByteArray@@3PAV_jclass@@A 10003170 NativeCall.obj
|
||||
0002:00000174 ?fieldHolderO@@3PAU_jfieldID@@A 10003174 NativeCall.obj
|
||||
0002:00000178 ?methodBooleanValue@@3PAU_jmethodID@@A 10003178 NativeCall.obj
|
||||
0002:0000017c ?methodIntValue@@3PAU_jmethodID@@A 1000317c NativeCall.obj
|
||||
|
||||
entry point at 0001:00000c3d
|
||||
|
||||
Static symbols
|
||||
|
||||
BIN
cpp/nativecall/Release/NativeCall.obj
Normal file
BIN
cpp/nativecall/Release/NativeCall.obj
Normal file
Binary file not shown.
BIN
cpp/nativecall/Release/RCa01380
Normal file
BIN
cpp/nativecall/Release/RCa01380
Normal file
Binary file not shown.
919
cpp/nativecall/Release/VoidCall.asm
Normal file
919
cpp/nativecall/Release/VoidCall.asm
Normal file
@@ -0,0 +1,919 @@
|
||||
TITLE C:\Documents and Settings\Administrator\My Documents\Software\NativeCall\src\cpp\VoidCall.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_VoidCall_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
|
||||
_Java_com_eaio_nativecall_VoidCall_executeCall@8 PROC NEAR
|
||||
|
||||
; 79 : (JNIEnv *env, jobject obj) {
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
; 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 :
|
||||
; 83 : #ifdef _WINDOWS
|
||||
; 84 : #ifdef _X86_
|
||||
; 85 :
|
||||
; 86 : __asm {
|
||||
; 87 :
|
||||
; 88 : call functionHandle
|
||||
|
||||
call DWORD PTR _functionHandle$[ebp]
|
||||
|
||||
; 89 :
|
||||
; 90 : }
|
||||
; 91 :
|
||||
; 92 : #endif
|
||||
; 93 : #endif
|
||||
; 94 :
|
||||
; 95 : 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]
|
||||
|
||||
; 96 :
|
||||
; 97 : }
|
||||
|
||||
pop esi
|
||||
pop ebp
|
||||
ret 8
|
||||
_Java_com_eaio_nativecall_VoidCall_executeCall@8 ENDP
|
||||
_TEXT ENDS
|
||||
PUBLIC ??_C@_0BL@NKOM@java?1lang?1OutOfMemoryError?$AA@ ; `string'
|
||||
PUBLIC _Java_com_eaio_nativecall_VoidCall_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$27769 = -24
|
||||
_byteArrayArg$27772 = -4
|
||||
_charArrayArg$27778 = -8
|
||||
_tempArg$27785 = -24
|
||||
_intPtr$27790 = -24
|
||||
_byteArrayArg$27796 = -12
|
||||
_charArrayArg$27802 = -16
|
||||
_tempPtr$27809 = -24
|
||||
_functionHandle$ = 8
|
||||
_j$ = 8
|
||||
_Java_com_eaio_nativecall_VoidCall_executeCall0@12 PROC NEAR
|
||||
|
||||
; 105 : (JNIEnv *env, jobject obj, jobjectArray params) {
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
sub esp, 28 ; 0000001cH
|
||||
push ebx
|
||||
push esi
|
||||
|
||||
; 106 :
|
||||
; 107 : 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
|
||||
|
||||
; 108 :
|
||||
; 109 : int* arrays = NULL;
|
||||
; 110 : 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 $L27758
|
||||
|
||||
; 111 : 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]
|
||||
|
||||
; 112 : return;
|
||||
|
||||
jmp $L28021
|
||||
$L27758:
|
||||
|
||||
; 113 : }
|
||||
; 114 : memset(arrays, 0, (sizeof(int) * len));
|
||||
|
||||
push edi
|
||||
push 0
|
||||
push eax
|
||||
call _memset
|
||||
|
||||
; 115 :
|
||||
; 116 : jobject param;
|
||||
; 117 :
|
||||
; 118 : 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 $L27765
|
||||
mov ecx, DWORD PTR _arrays$[ebp]
|
||||
lea edi, DWORD PTR [ecx+eax*4]
|
||||
jmp SHORT $L27763
|
||||
$L28028:
|
||||
|
||||
; 113 : }
|
||||
; 114 : memset(arrays, 0, (sizeof(int) * len));
|
||||
|
||||
mov eax, DWORD PTR _i$[ebp]
|
||||
$L27763:
|
||||
|
||||
; 119 :
|
||||
; 120 : 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
|
||||
|
||||
; 121 :
|
||||
; 122 : if (param == NULL) {
|
||||
|
||||
test ebx, ebx
|
||||
jne SHORT $L27766
|
||||
|
||||
; 123 : _push(0);
|
||||
|
||||
push 0
|
||||
|
||||
; 124 : }
|
||||
; 125 : else if (env->IsInstanceOf(param, classInteger)) {
|
||||
|
||||
jmp $L27764
|
||||
$L27766:
|
||||
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 $L27768
|
||||
|
||||
; 126 : 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$27769[ebp], eax
|
||||
|
||||
; 127 : _push(intArg)
|
||||
|
||||
push DWORD PTR _intArg$27769[ebp]
|
||||
|
||||
; 128 : }
|
||||
; 129 : else if (env->IsInstanceOf(param, classByteArray)) {
|
||||
|
||||
jmp $L27764
|
||||
$L27768:
|
||||
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 $L27771
|
||||
|
||||
; 130 : 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$27772[ebp], eax
|
||||
|
||||
; 131 : arrays[i] = (int) &byteArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _byteArrayArg$27772[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 132 : _push(byteArrayArg)
|
||||
|
||||
push DWORD PTR _byteArrayArg$27772[ebp]
|
||||
|
||||
; 133 : }
|
||||
; 134 : else if (env->IsInstanceOf(param, classCharArray)) {
|
||||
|
||||
jmp $L27764
|
||||
$L27771:
|
||||
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 $L27777
|
||||
|
||||
; 135 : unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
; 136 : (jarray) param, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+888]
|
||||
mov DWORD PTR _charArrayArg$27778[ebp], eax
|
||||
|
||||
; 137 : arrays[i] = (int) &charArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _charArrayArg$27778[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 138 : _push(charArrayArg)
|
||||
|
||||
push DWORD PTR _charArrayArg$27778[ebp]
|
||||
|
||||
; 139 : }
|
||||
; 140 : else if (env->IsInstanceOf(param, classBoolean)) {
|
||||
|
||||
jmp $L27764
|
||||
$L27777:
|
||||
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 $L27783
|
||||
|
||||
; 141 : 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
|
||||
|
||||
; 142 : int tempArg = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
|
||||
neg al
|
||||
sbb eax, eax
|
||||
neg eax
|
||||
mov DWORD PTR _tempArg$27785[ebp], eax
|
||||
|
||||
; 143 : _push(tempArg)
|
||||
|
||||
push DWORD PTR _tempArg$27785[ebp]
|
||||
|
||||
; 144 : }
|
||||
; 145 : else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
jmp $L27764
|
||||
$L27783:
|
||||
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 $L27764
|
||||
|
||||
; 146 :
|
||||
; 147 : /* Holder */
|
||||
; 148 :
|
||||
; 149 : 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]
|
||||
|
||||
; 150 :
|
||||
; 151 : 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 $L27789
|
||||
|
||||
; 152 : int *intPtr = new int;
|
||||
|
||||
push 4
|
||||
call ??2@YAPAXI@Z ; operator new
|
||||
pop ecx
|
||||
mov DWORD PTR _intPtr$27790[ebp], eax
|
||||
|
||||
; 153 : *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$27790[ebp]
|
||||
add esp, 12 ; 0000000cH
|
||||
|
||||
; 154 : arrays[i] = (int) intPtr;
|
||||
|
||||
mov DWORD PTR [edi], ecx
|
||||
mov DWORD PTR [ecx], eax
|
||||
|
||||
; 155 : _push(intPtr);
|
||||
|
||||
push DWORD PTR _intPtr$27790[ebp]
|
||||
|
||||
; 156 : }
|
||||
; 157 : else if (env->IsInstanceOf(o, classByteArray)) {
|
||||
|
||||
jmp $L27764
|
||||
$L27789:
|
||||
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 $L27795
|
||||
|
||||
; 158 : 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$27796[ebp], eax
|
||||
|
||||
; 159 : arrays[i] = (int) &byteArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _byteArrayArg$27796[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 160 : _push(byteArrayArg)
|
||||
|
||||
push DWORD PTR _byteArrayArg$27796[ebp]
|
||||
|
||||
; 161 : }
|
||||
; 162 : else if (env->IsInstanceOf(o, classCharArray)) {
|
||||
|
||||
jmp SHORT $L27764
|
||||
$L27795:
|
||||
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 $L27801
|
||||
|
||||
; 163 : unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
; 164 : (jarray) o, 0);
|
||||
|
||||
mov eax, DWORD PTR [esi]
|
||||
push 0
|
||||
push ebx
|
||||
push esi
|
||||
call DWORD PTR [eax+888]
|
||||
mov DWORD PTR _charArrayArg$27802[ebp], eax
|
||||
|
||||
; 165 : arrays[i] = (int) &charArrayArg;
|
||||
|
||||
lea eax, DWORD PTR _charArrayArg$27802[ebp]
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 166 : _push(charArrayArg)
|
||||
|
||||
push DWORD PTR _charArrayArg$27802[ebp]
|
||||
|
||||
; 167 : }
|
||||
; 168 : else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
|
||||
jmp SHORT $L27764
|
||||
$L27801:
|
||||
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 $L27764
|
||||
|
||||
; 169 : 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
|
||||
|
||||
; 170 : int *tempPtr = new int;
|
||||
|
||||
push 4
|
||||
mov bl, al
|
||||
call ??2@YAPAXI@Z ; operator new
|
||||
add esp, 16 ; 00000010H
|
||||
|
||||
; 171 : *tempPtr = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
|
||||
xor ecx, ecx
|
||||
test bl, bl
|
||||
setne cl
|
||||
mov DWORD PTR _tempPtr$27809[ebp], eax
|
||||
mov DWORD PTR [eax], ecx
|
||||
|
||||
; 172 : arrays[i] = (int) tempPtr;
|
||||
|
||||
mov DWORD PTR [edi], eax
|
||||
|
||||
; 173 : _push(tempPtr);
|
||||
|
||||
push DWORD PTR _tempPtr$27809[ebp]
|
||||
|
||||
; 172 : arrays[i] = (int) tempPtr;
|
||||
|
||||
$L27764:
|
||||
dec DWORD PTR _i$[ebp]
|
||||
sub edi, 4
|
||||
cmp DWORD PTR _i$[ebp], 0
|
||||
jge $L28028
|
||||
|
||||
; 115 :
|
||||
; 116 : jobject param;
|
||||
; 117 :
|
||||
; 118 : for (int i = len - 1; i >= 0; i--) {
|
||||
|
||||
mov ebx, DWORD PTR _len$[ebp]
|
||||
$L27765:
|
||||
|
||||
; 174 : }
|
||||
; 175 :
|
||||
; 176 : /* end Holder */
|
||||
; 177 :
|
||||
; 178 : }
|
||||
; 179 :
|
||||
; 180 : }
|
||||
; 181 :
|
||||
; 182 : 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
|
||||
|
||||
; 183 :
|
||||
; 184 : #ifdef _WINDOWS
|
||||
; 185 : #ifdef _X86_
|
||||
; 186 :
|
||||
; 187 : __asm {
|
||||
; 188 :
|
||||
; 189 : call functionHandle
|
||||
|
||||
call DWORD PTR _functionHandle$[ebp]
|
||||
|
||||
; 190 :
|
||||
; 191 : }
|
||||
; 192 :
|
||||
; 193 : #endif
|
||||
; 194 : #endif
|
||||
; 195 :
|
||||
; 196 : for (int j = 0; j < len; ++j) {
|
||||
|
||||
and DWORD PTR _j$[ebp], 0
|
||||
test ebx, ebx
|
||||
jle $L27817
|
||||
|
||||
; 174 : }
|
||||
; 175 :
|
||||
; 176 : /* end Holder */
|
||||
; 177 :
|
||||
; 178 : }
|
||||
; 179 :
|
||||
; 180 : }
|
||||
; 181 :
|
||||
; 182 : jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
|
||||
mov ebx, DWORD PTR _arrays$[ebp]
|
||||
$L27815:
|
||||
|
||||
; 197 : 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
|
||||
|
||||
; 198 : if (param == NULL) {}
|
||||
|
||||
test edi, edi
|
||||
mov DWORD PTR _param$[ebp], edi
|
||||
je $L27816
|
||||
|
||||
; 199 : 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 $L27833
|
||||
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 $L27833
|
||||
|
||||
; 201 : }
|
||||
; 202 : 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 $L27816
|
||||
|
||||
; 203 :
|
||||
; 204 : 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]
|
||||
|
||||
; 205 :
|
||||
; 206 : 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 $L27827
|
||||
|
||||
; 207 : int* out = (int*) arrays[j];
|
||||
|
||||
mov edi, DWORD PTR [ebx]
|
||||
|
||||
; 208 : 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
|
||||
$L28031:
|
||||
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]
|
||||
|
||||
; 209 : delete out;
|
||||
|
||||
push edi
|
||||
call ??3@YAXPAX@Z ; operator delete
|
||||
pop ecx
|
||||
|
||||
; 210 : }
|
||||
; 211 : else if (env->IsInstanceOf(o, classByteArray) || env->IsInstanceOf(o, classCharArray)) {
|
||||
|
||||
jmp SHORT $L27816
|
||||
$L27827:
|
||||
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 $L27833
|
||||
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 $L27833
|
||||
|
||||
; 212 : env->ReleasePrimitiveArrayCritical((jarray) o, (void*) arrays[j], 0);
|
||||
; 213 : }
|
||||
; 214 : 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 $L27816
|
||||
|
||||
; 215 : int* out = (int*) arrays[j];
|
||||
|
||||
mov edi, DWORD PTR [ebx]
|
||||
|
||||
; 216 : 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
|
||||
|
||||
; 217 : delete out;
|
||||
|
||||
jmp SHORT $L28031
|
||||
$L27833:
|
||||
|
||||
; 200 : 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]
|
||||
$L27816:
|
||||
inc DWORD PTR _j$[ebp]
|
||||
mov eax, DWORD PTR _j$[ebp]
|
||||
add ebx, 4
|
||||
cmp eax, DWORD PTR _len$[ebp]
|
||||
jl $L27815
|
||||
$L27817:
|
||||
|
||||
; 218 : }
|
||||
; 219 :
|
||||
; 220 : }
|
||||
; 221 :
|
||||
; 222 : }
|
||||
; 223 :
|
||||
; 224 : delete [] arrays;
|
||||
|
||||
push DWORD PTR _arrays$[ebp]
|
||||
call ??3@YAXPAX@Z ; operator delete
|
||||
pop ecx
|
||||
|
||||
; 225 :
|
||||
; 226 : 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]
|
||||
$L28021:
|
||||
|
||||
; 227 :
|
||||
; 228 : }
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
leave
|
||||
ret 12 ; 0000000cH
|
||||
_Java_com_eaio_nativecall_VoidCall_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
|
||||
BIN
cpp/nativecall/Release/VoidCall.obj
Normal file
BIN
cpp/nativecall/Release/VoidCall.obj
Normal file
Binary file not shown.
228
cpp/nativecall/VoidCall.cpp
Normal file
228
cpp/nativecall/VoidCall.cpp
Normal file
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
* VoidCall.cpp
|
||||
*
|
||||
* Created on 16.09.2004.
|
||||
*
|
||||
* $Id: VoidCall.cpp,v 1.4 2006/04/20 05:50:15 grnull Exp $
|
||||
*
|
||||
* eaio: NativeCall - calling operating system methods from Java
|
||||
* Copyright (c) 2004-2006 Johann Burkard (<mailto:jb@eaio.com>)
|
||||
* <http://eaio.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <jni.h>
|
||||
#include "com_eaio_nativecall_VoidCall.h"
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <windows.h>
|
||||
#include <winbase.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#ifdef _X86_
|
||||
|
||||
#define _push(x) __asm { push x };
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// NativeCall fields
|
||||
|
||||
extern jfieldID fieldFunction, fieldModule, fieldFunctionHandle,
|
||||
fieldModuleHandle, fieldLastErrorCode;
|
||||
|
||||
// Holder fields
|
||||
|
||||
extern jfieldID fieldHolderO;
|
||||
|
||||
// Classes
|
||||
|
||||
extern jclass classBoolean,/* classByte, classCharacter, classShort,*/
|
||||
classInteger, /* classLong, classFloat, classDouble,*/ classString,
|
||||
classByteArray, classCharArray, /*classIntArray,*/ classHolder;
|
||||
|
||||
// Wrapper class methods
|
||||
|
||||
extern jmethodID methodBooleanValue,/* methodByteValue, methodCharValue,
|
||||
methodShortValue,*/ methodIntValue/*, methodLongValue, methodFloatValue,
|
||||
methodDoubleValue*/;
|
||||
|
||||
// Constructors
|
||||
|
||||
extern jmethodID newIntegerInt, newBooleanBoolean;
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_VoidCall
|
||||
* Method: executeCall
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_VoidCall_executeCall
|
||||
(JNIEnv *env, jobject obj) {
|
||||
|
||||
jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#ifdef _X86_
|
||||
|
||||
__asm {
|
||||
|
||||
call functionHandle
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_VoidCall
|
||||
* Method: executeCall0
|
||||
* Signature: ([Ljava/lang/Object;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_VoidCall_executeCall0
|
||||
(JNIEnv *env, jobject obj, jobjectArray params) {
|
||||
|
||||
const int len = env->GetArrayLength(params);
|
||||
|
||||
int* arrays = NULL;
|
||||
if (!(arrays = new int[len])) {
|
||||
env->ThrowNew(env->FindClass("java/lang/OutOfMemoryError"), NULL);
|
||||
return;
|
||||
}
|
||||
memset(arrays, 0, (sizeof(int) * len));
|
||||
|
||||
jobject param;
|
||||
|
||||
for (int i = len - 1; i >= 0; i--) {
|
||||
|
||||
param = env->GetObjectArrayElement(params, i);
|
||||
|
||||
if (param == NULL) {
|
||||
_push(0);
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classInteger)) {
|
||||
int intArg = env->CallIntMethod(param, methodIntValue);
|
||||
_push(intArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classByteArray)) {
|
||||
char* byteArrayArg = (char*) env->GetPrimitiveArrayCritical((jarray) param, 0);
|
||||
arrays[i] = (int) &byteArrayArg;
|
||||
_push(byteArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classCharArray)) {
|
||||
unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
(jarray) param, 0);
|
||||
arrays[i] = (int) &charArrayArg;
|
||||
_push(charArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classBoolean)) {
|
||||
jboolean booleanArg = env->CallBooleanMethod(param, methodBooleanValue);
|
||||
int tempArg = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
_push(tempArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
/* Holder */
|
||||
|
||||
jobject o = env->GetObjectField(param, fieldHolderO);
|
||||
|
||||
if (env->IsInstanceOf(o, classInteger)) {
|
||||
int *intPtr = new int;
|
||||
*intPtr = env->CallIntMethod(o, methodIntValue);
|
||||
arrays[i] = (int) intPtr;
|
||||
_push(intPtr);
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classByteArray)) {
|
||||
char* byteArrayArg = (char*) env->GetPrimitiveArrayCritical((jarray) o, 0);
|
||||
arrays[i] = (int) &byteArrayArg;
|
||||
_push(byteArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classCharArray)) {
|
||||
unsigned short* charArrayArg = (unsigned short*) env->GetPrimitiveArrayCritical(
|
||||
(jarray) o, 0);
|
||||
arrays[i] = (int) &charArrayArg;
|
||||
_push(charArrayArg)
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
jboolean booleanArg = env->CallBooleanMethod(o, methodBooleanValue);
|
||||
int *tempPtr = new int;
|
||||
*tempPtr = (booleanArg == JNI_FALSE ? 0 : 1);
|
||||
arrays[i] = (int) tempPtr;
|
||||
_push(tempPtr);
|
||||
}
|
||||
|
||||
/* end Holder */
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
jint functionHandle = env->GetIntField(obj, fieldFunctionHandle);
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#ifdef _X86_
|
||||
|
||||
__asm {
|
||||
|
||||
call functionHandle
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
for (int j = 0; j < len; ++j) {
|
||||
param = env->GetObjectArrayElement(params, j);
|
||||
if (param == NULL) {}
|
||||
else if (env->IsInstanceOf(param, classByteArray) || env->IsInstanceOf(param, classCharArray)) {
|
||||
env->ReleasePrimitiveArrayCritical((jarray) param, (void*) arrays[j], 0);
|
||||
}
|
||||
else if (env->IsInstanceOf(param, classHolder)) {
|
||||
|
||||
jobject o = env->GetObjectField(param, fieldHolderO);
|
||||
|
||||
if (env->IsInstanceOf(o, classInteger)) {
|
||||
int* out = (int*) arrays[j];
|
||||
env->SetObjectField(param, fieldHolderO, env->NewObject(classInteger, newIntegerInt, *out));
|
||||
delete out;
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classByteArray) || env->IsInstanceOf(o, classCharArray)) {
|
||||
env->ReleasePrimitiveArrayCritical((jarray) o, (void*) arrays[j], 0);
|
||||
}
|
||||
else if (env->IsInstanceOf(o, classBoolean)) {
|
||||
int* out = (int*) arrays[j];
|
||||
env->SetObjectField(param, fieldHolderO, env->NewObject(classBoolean, newBooleanBoolean, (*out == 0 ? JNI_FALSE : JNI_TRUE)));
|
||||
delete out;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
delete [] arrays;
|
||||
|
||||
env->SetIntField(obj, fieldLastErrorCode, GetLastError());
|
||||
|
||||
}
|
||||
29
cpp/nativecall/com_eaio_nativecall_IntCall.h
Normal file
29
cpp/nativecall/com_eaio_nativecall_IntCall.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_eaio_nativecall_IntCall */
|
||||
|
||||
#ifndef _Included_com_eaio_nativecall_IntCall
|
||||
#define _Included_com_eaio_nativecall_IntCall
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_eaio_nativecall_IntCall
|
||||
* Method: executeCall
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_eaio_nativecall_IntCall_executeCall
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_IntCall
|
||||
* Method: executeCall0
|
||||
* Signature: ([Ljava/lang/Object;)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_eaio_nativecall_IntCall_executeCall0
|
||||
(JNIEnv *, jobject, jobjectArray);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
45
cpp/nativecall/com_eaio_nativecall_NativeCall.h
Normal file
45
cpp/nativecall/com_eaio_nativecall_NativeCall.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_eaio_nativecall_NativeCall */
|
||||
|
||||
#ifndef _Included_com_eaio_nativecall_NativeCall
|
||||
#define _Included_com_eaio_nativecall_NativeCall
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: initIDs
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_NativeCall_initIDs
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: initHandles
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_eaio_nativecall_NativeCall_initHandles
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: getLastError
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_eaio_nativecall_NativeCall_getLastError
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_NativeCall
|
||||
* Method: destroy
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_NativeCall_destroy
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
29
cpp/nativecall/com_eaio_nativecall_VoidCall.h
Normal file
29
cpp/nativecall/com_eaio_nativecall_VoidCall.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_eaio_nativecall_VoidCall */
|
||||
|
||||
#ifndef _Included_com_eaio_nativecall_VoidCall
|
||||
#define _Included_com_eaio_nativecall_VoidCall
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_eaio_nativecall_VoidCall
|
||||
* Method: executeCall
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_VoidCall_executeCall
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_eaio_nativecall_VoidCall
|
||||
* Method: executeCall0
|
||||
* Signature: ([Ljava/lang/Object;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_eaio_nativecall_VoidCall_executeCall0
|
||||
(JNIEnv *, jobject, jobjectArray);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
25
cpp/nativecall/readme.txt
Normal file
25
cpp/nativecall/readme.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
# $Id: readme.txt,v 1.1 2006/01/05 19:55:58 grnull Exp $
|
||||
|
||||
Hi,
|
||||
|
||||
this is the readme file for people who want to build the native libraries for
|
||||
NativeCall themselves.
|
||||
|
||||
Compiling the native libraries requires some header files (after all, it's
|
||||
just C++).
|
||||
|
||||
Search for
|
||||
|
||||
jni.h
|
||||
|
||||
which is required. You will most likey also need jni_md.h and
|
||||
jniproto_md.h. Copy these files to this directory.
|
||||
|
||||
The library has been compiled and is set up for libctiny.lib to make the
|
||||
binaries even smaller. You can download libctiny.lib from
|
||||
|
||||
<http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx>
|
||||
|
||||
After you downloaded it, extract libctiny.lib to this folder. You also might
|
||||
have to change the paths for the compiler and the linker.
|
||||
|
||||
15
cpp/nativecall/resource.h
Normal file
15
cpp/nativecall/resource.h
Normal file
@@ -0,0 +1,15 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by version.rc
|
||||
//
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 103
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1000
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
104
cpp/nativecall/version.rc
Normal file
104
cpp/nativecall/version.rc
Normal file
@@ -0,0 +1,104 @@
|
||||
//Microsoft Developer Studio generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "winres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Deutsch (Deutschland) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
#ifndef _MAC
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 0,4,1,0
|
||||
PRODUCTVERSION 0,4,1,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040704b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "eaio\0"
|
||||
VALUE "FileDescription", "NativeCall native library\0"
|
||||
VALUE "FileVersion", "0, 4, 1, 0\0"
|
||||
VALUE "LegalCopyright", "2003-2006 Johann Burkard\0"
|
||||
VALUE "OriginalFilename", "NativeCall.dll\0"
|
||||
VALUE "ProductName", "NativeCall\0"
|
||||
VALUE "ProductVersion", "0, 4, 1, 0\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x407, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // !_MAC
|
||||
|
||||
#endif // Deutsch (Deutschland) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
Reference in New Issue
Block a user