Zum Inhalt springen

Bestehende DLL einbinden


Empfohlene Beiträge

Geschrieben
...besagt, dass das so funktionieren kann ?

Nein, das war mir nur konventionsmäßig aufgefallen.

Jetzt wäre die Frage, wie verschlüsselt wird, quasi, welcher parameter verändert oder neu zugewiesen wird, das könnte nämlich auch einen Fehler erklären bei Arrays.

Geschrieben

Der erste Parameter enthält das einfache Passwort, in den zweiten wird das verschlüsselte Passwort geschrieben und der dritte Parameter beschreibt die Länge des verschlüsselten Passworts.

Geschrieben

char s1[100];

		s1[0] = 't' ;

		s1[1] = 'e' ;

		s1[2] = 's' ;

		s1[3] = 't' ;

		s1[4] = '0' ;

		s1[5] = '1' ;

		char s2[8];


		int n1		=	8;


		try {

			if(function(s1, s2, n1)) {

				cout << "Verschlüsselung erfolgreich!" << endl;

			}

			else {

				cout << "Verschlüsselung nicht erfolgreich!" << endl;

			}

		}		

		catch (...) {

			cout << "Catchbereich: " << endl;

			cout << "'";

			for (int i = 0; i < n1; i++) {

				cout << s2[i];

			}

			cout << "'" << endl;

		}

Hatte ich probiert ;D

Aber er landet immer im Catchblock

Die Verschlüsselung startet anscheinend. Im ersten Zeichen meines verschlüsselten Passworts steht eine 6 ;D

Jedoch weiterhin nur gefüllt mit Blanks (siehe Anhang).

Meine Umgang mit den Arrays ist hoffentlich richtig so?

post-51116-14430448050211_thumb.jpg

Geschrieben

Hatte ich probiert ;D

Aber er landet immer im Catchblock

Vielleicht mal noch s2 als normalen Zeiger.

Meine Umgang mit den Arrays ist hoffentlich richtig so?

char s1[100] = "test01";

;)

Geschrieben

nein du musst das Array mit einer 0 abschließen weil dadurch in C das Ende markiert wird.

Also


s1[5] = 0;
[/PHP]

Aber einfacher wäre es, wie oben schon geschrieben, einfach strcpy zu verwenden das das automatisch macht, also:

[PHP]
strcpy(s1,"test01");

Ohne die 0 am Ende läuft die Funktion wahrscheinlich so lange über den Speicher bis irgendwo eine 0 steht und wenn dabei Speicher versucht wird zu lesen der dir nicht gehört dann gibts nen Fehler.

Geschrieben

char s1[100] = "test01";

		char s2[100] = "test01";


		int n1		=	8;



		if(function(s1, s2, n1)) {

			cout << "Verschlüsselung erfolgreich!" << endl;

			cout << s2 << endl;

		}

		else {

			cout << "Verschlüsselung nicht erfolgreich!" << endl;

		}

!Passwort wurde korrekt verschlüsselt!

Probleme, die ich jetzt noch habe sind 2 Mal das Auftreten von dem Konventionsfehler. 1 x vorm Aufruf von s2 und 1 x nachdem ich das Verschlüsselte Passwort ausgegeben hab oO

Geschrieben

Was meinst du mit "dem Aufruf von s2"?

Versuchs mal so wie ich geschrieben habe:


char s1[100];
char s2[100];
strcpy(s1,"test01");

int n1 = 8;


if(function(s1, s2, n1)) {
cout << "Verschlüsselung erfolgreich!" << endl;
cout << s2 << endl;
}
else {
cout << "Verschlüsselung nicht erfolgreich!" << endl;
}

[/PHP]

Bin mir da gerade nicht so sicher deswegen sag ich erst hinterher wieso ;)

Geschrieben

Leider auch mit deinem Code die beiden Fehler.

Was mich irritiert:

Konventionsfehler tritt auf bevor oder während die Funktion aufgerufen wird, dann wird das neue verschlüsselte Passwort ausgegeben.

Nachdem das geschehen ist kommt im Code ja eig. nichts mehr, aber es tritt trotzdem nochmal ein Konventionsfehler auf.

Geschrieben

Ich habe jetzt mal die beiden Speicheraddressierungsfehler, die man per Button Ignorieren kann, ignoriert und die JNI einbindung begonnen.

C++

JNIEXPORT jstring JNICALL Java_database_Crypt_IpsEncrypt
(JNIEnv * env, jobject obj, jstring name) {
HINSTANCE hLib = NULL;
hLib = LoadLibrary(IPS_ENCRYPT);

typedef bool (*pIpsEncrypt)( char *, char *, int );
pIpsEncrypt function = reinterpret_cast< pIpsEncrypt >( GetProcAddress( hLib, "IpsEncrypt" ) );


if(hLib != NULL){
if( function != NULL )
{
char s1[100];
char s2[100];
strcpy(s1, env->GetStringUTFChars(name, false));

int n1 = 8;

function(s1, s2, n1);

printf(s2);

return env->NewStringUTF( s2 );
}
}

printf("Null returned");
return NULL;

}[/PHP]

Java:

[PHP]public Crypt() {
System.loadLibrary("CallAvPass32DLL.dll");
try {
System.out.println("Passwort: " + IpsEncrypt("test01"));
}
catch (Exception e) {
e.printStackTrace();
}
}

Das Ergebnis ist verblüffend :D

Also vorab:

Der Aufruf funktioniert nun.

Aber das Ergebnis im Sysout meines Java Debuggers ist folgendes:

Unhandled exception

Type=Segmentation error vmState=0x00040000

J9Generic_Signal_Number=00000004 ExceptionCode=c0000005 ExceptionAddress=0006FCCE ContextFlags=0001003f

Handler1=7EFB0630 Handler2=7F057A80 InaccessibleAddress=C5857CAE

EDI=CCCCCCCC ESI=CCCCCCCC EAX=C5857CAE EBX=CCCCCCCC

ECX=7C91056D EDX=00000020

EIP=0006FCCE ESP=0006FC94 EBP=4143EB9C

Module=

Module_base_address=00030000 Offset_in_DLL=0003fcce

Target=2_30_20070322_12058_lHdSMR (Windows XP 5.1 build 2600 Service Pack 2)

CPU=x86 (1 logical CPUs) (0x7f666000 RAM)

JVMDUMP006I Processing Dump Event "gpf", detail "" - Please Wait.

JVMDUMP007I JVM Requesting System Dump using 'O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\core.20080902.102947.3144.dmp'

JVMDUMP010I System Dump written to O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\core.20080902.102947.3144.dmp

JVMDUMP007I JVM Requesting Snap Dump using 'O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\Snap0001.20080902.102947.3144.trc'

JVMDUMP010I Snap Dump written to O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\Snap0001.20080902.102947.3144.trc

JVMDUMP007I JVM Requesting Java Dump using 'O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\javacore.20080902.102947.3144.txt'

JVMDUMP010I Java Dump written to O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\javacore.20080902.102947.3144.txt

JVMDUMP013I Processed Dump Event "gpf", detail "".

ZKVNS114

Man sieht am Ende der Fehler folgt der printf mit dem verschlüsselten Passwort, aber der Sysout im meinem Java Code der eigentlich auch mein verschlüsseltes Passwort ausgeben soll wird nicht mehr ausgeführt.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...