c++ compiler probleme
-
Hallo,
ich versuche einen alten sourcecode- der mit borland geschrieben wurde wieder zu aktivieren (Ms visual 10). Leider bekomme ich es überhaupt nicht hin- Ich schätze, dass es Linker problem sind. Könnte ihr mir helfen?
Hier der Code
// -------------------------------------------------------------------------- // // // -------------------------------------------------------------------------- // #include <Windows.h> #include <StdIo.h> #include "Feal.h" #include "KNuth.h" #include "wk.h" #pragma argsused // -------------------------------------------------------------------------- // void ShowData( LPSTR cTitle, BYTE * Table, DWORD Count ) { DWORD Index; printf( cTitle ); for( Index = 0; Index < Count; Index++ ) { printf( "%02X", Table[ Index ] ); } printf( "\n" ); } // -------------------------------------------------------------------------- // void TKNuth20_GetTable( PKNuth20 pKN, BYTE * Plain, BYTE * Cipher ) { DWORD Index; DWORD Index01; for( Index = 0; Index < 20; Index++ ) { pKN->Data[ 19 - Index ] = Cipher[ Index ] ^ Plain[ Index ]; } Index01 = 3; for( Index = 0; Index < 20; Index++ ) { pKN->Data[ Index ] -= pKN->Data[ Index01 ]; Index01++; if( Index01 > 19 ) Index01 = 0; } } // -------------------------------------------------------------------------- // void TKNuth21_GetTable( PKNuth21 pKN, BYTE * Plain, BYTE * Cipher ) { DWORD Index; DWORD Index01; for( Index = 0; Index < 21; Index++ ) { pKN->Data[ 20 - Index ] = Cipher[ Index ] ^ Plain[ Index ]; } Index01 = 2; for( Index = 0; Index < 21; Index++ ) { pKN->Data[ Index ] -= pKN->Data[ Index01 ]; Index01++; if( Index01 > 20 ) Index01 = 0; } /* pKN->Data[ 20 ] = Cipher[ 0 ] ^ Plain[ 0 ]; pKN->Data[ 19 ] = Cipher[ 1 ] ^ Plain[ 1 ]; pKN->Data[ 18 ] = Cipher[ 2 ] ^ Plain[ 2 ]; pKN->Data[ 17 ] = Cipher[ 3 ] ^ Plain[ 3 ]; pKN->Data[ 16 ] = Cipher[ 4 ] ^ Plain[ 4 ]; pKN->Data[ 15 ] = Cipher[ 5 ] ^ Plain[ 5 ]; pKN->Data[ 14 ] = Cipher[ 6 ] ^ Plain[ 6 ]; pKN->Data[ 13 ] = Cipher[ 7 ] ^ Plain[ 7 ]; pKN->Data[ 12 ] = Cipher[ 8 ] ^ Plain[ 8 ]; pKN->Data[ 12 ] -= pKN->Data[ 14 ]; pKN->Data[ 13 ] -= pKN->Data[ 15 ]; pKN->Data[ 14 ] -= pKN->Data[ 16 ]; pKN->Data[ 15 ] -= pKN->Data[ 17 ]; pKN->Data[ 16 ] -= pKN->Data[ 18 ]; pKN->Data[ 17 ] -= pKN->Data[ 19 ]; pKN->Data[ 18 ] -= pKN->Data[ 20 ]; pKN->Data[ 1 ] = pKN->Data[ 13 ] - 0xB3; pKN->Data[ 5 ] = pKN->Data[ 1 ]; pKN->Data[ 20 ] -= pKN->Data[ 1 ]; pKN->Data[ 0 ] = pKN->Data[ 12 ] - 0xB3; pKN->Data[ 4 ] = pKN->Data[ 0 ]; pKN->Data[ 19 ] -= pKN->Data[ 0 ]; pKN->Data[ 2 ] = pKN->Data[ 14 ] - 0xB3; pKN->Data[ 6 ] = pKN->Data[ 2 ]; pKN->Data[ 3 ] = pKN->Data[ 15 ] - 0xB3; pKN->Data[ 7 ] = pKN->Data[ 3 ]; pKN->Data[ 8 ] = pKN->Data[ 16 ] - 0xB3; pKN->Data[ 9 ] = pKN->Data[ 17 ] - 0xB3; pKN->Data[ 10 ] = pKN->Data[ 18 ] - 0xB3; pKN->Data[ 11 ] = pKN->Data[ 19 ] - 0xB3; */ } // -------------------------------------------------------------------------- // BOOL FindKeys( DWORD dwCipher, BYTE * Plain, BYTE * Cipher, BYTE * InitData, DWORD * KeyOut ) { KSchedule KS; TKNuth21 KN21; TKNuth20 KN20; TKNuth20 New20 = { 0 }; TKNuth21 New21 = { 0 }; BYTE TmpCipher[ 20 ]; BOOL Decremented = FALSE; BOOL bRet; if( dwCipher == WKB_SEL_DIRECT ) { TKNuth21_GetTable( &KN21, Plain, Cipher ); memcpy( KeyOut, KN21.Data + 4, 4 ); memcpy( ( ( BYTE * ) KeyOut ) + 4, KN21.Data + 8, 4 ); printf( "þ Trying %08X %08X: ", KeyOut[ 0 ], KeyOut[ 1 ] ); // Check if its 100% valid TKNuth21_Init( &New21, KeyOut[ 0 ], KeyOut[ 1 ] ); TKNuth21_Enc( &New21, Plain, TmpCipher, 20 ); if( !memcmp( TmpCipher, Cipher, 20 ) ) { printf( " OK\n" ); } else { printf( " BAD\n" ); } } else if( dwCipher == WKB_SEL_KNUTH20 ) { TKNuth20_GetTable( &KN20, Plain, Cipher ); do { TKNuth21_GetTable( &KN21, InitData, KN20.Data ); memcpy( KeyOut, KN21.Data + 4, 4 ); memcpy( ( ( BYTE * ) KeyOut ) + 4, KN21.Data + 8, 4 ); printf( "þ Trying %08X %08X: ", KeyOut[ 0 ], KeyOut[ 1 ] ); // Check if its 100% valid TKNuth21_Init( &New21, KeyOut[ 0 ], KeyOut[ 1 ] ); TKNuth21_Enc( &New21, InitData, New20.Data, 20 ); if( !( New20.Data[ 2 ] & 0x01 ) ) { New20.Data[ 2 ]++; } TKNuth20_Enc( &New20, Plain, TmpCipher, 20 ); if( !memcmp( TmpCipher, Cipher, 20 ) ) { printf( " OK\n" ); bRet = TRUE; break; } if( Decremented ) { bRet = FALSE; break; } KN20.Data[ 2 ]--; printf( " BAD\n" ); Decremented = TRUE; } while( TRUE ); } return bRet; } // -------------------------------------------------------------------------- // void main( void ) { DWORD Key[] = { 0, 0 }; BYTE knPlain[ 50 ] = { 0 }; BYTE knCipher[ 50 ] = { 0 }; KSchedule KS; TKNuth21 KN21; knPlain[ 0 ] = 0x00; knPlain[ 1 ] = 0x00; knPlain[ 2 ] = 0x00; knPlain[ 3 ] = 0x00; knPlain[ 4 ] = 0x00; knPlain[ 5 ] = 0x00; knPlain[ 6 ] = 0x00; knPlain[ 7 ] = 0x00; knPlain[ 8 ] = 0x00; knPlain[ 9 ] = 0x00; knPlain[ 10 ] = 0x00; knPlain[ 11 ] = 0x00; knPlain[ 12 ] = 0x00; knPlain[ 13 ] = 0x00; knPlain[ 14 ] = 0x00; knPlain[ 15 ] = 0x00; knPlain[ 16 ] = 0x00; knPlain[ 17 ] = 0x00; knPlain[ 18 ] = 0x00; knPlain[ 19 ] = 0x00; knPlain[ 20 ] = 0x00; knPlain[ 21 ] = 0x00; knPlain[ 22 ] = 0x00; knPlain[ 23 ] = 0x00; knPlain[ 24 ] = 0x00; knPlain[ 25 ] = 0x00; knPlain[ 26 ] = 0x00; knPlain[ 27 ] = 0x00; knPlain[ 28 ] = 0x00; knPlain[ 29 ] = 0x00; knPlain[ 30 ] = 0x00; knPlain[ 31 ] = 0x00; knPlain[ 32 ] = 0x00; knPlain[ 33 ] = 0x00; knPlain[ 34 ] = 0x00; knPlain[ 35 ] = 0x00; knPlain[ 36 ] = 0x00; knPlain[ 37 ] = 0x00; knPlain[ 38 ] = 0x00; knPlain[ 39 ] = 0x00; knPlain[ 40 ] = 0x00; knPlain[ 41 ] = 0x00; knPlain[ 42 ] = 0x00; knPlain[ 43 ] = 0x00; knPlain[ 44 ] = 0x00; knPlain[ 45 ] = 0x00; knPlain[ 46 ] = 0x00; knPlain[ 47 ] = 0x00; knPlain[ 48 ] = 0x00; knPlain[ 49 ] = 0x00; knCipher[ 0 ] = 0x2B; knCipher[ 1 ] = 0x0E; knCipher[ 2 ] = 0x1E; knCipher[ 3 ] = 0x7E; knCipher[ 4 ] = 0xAD; knCipher[ 5 ] = 0x59; knCipher[ 6 ] = 0x0A; knCipher[ 7 ] = 0xF7; knCipher[ 8 ] = 0x33; knCipher[ 9 ] = 0xDC; knCipher[ 10 ] = 0x73; knCipher[ 11 ] = 0x99; knCipher[ 12 ] = 0x4F; knCipher[ 13 ] = 0xC1; knCipher[ 14 ] = 0xF9; knCipher[ 15 ] = 0xAC; knCipher[ 16 ] = 0x6F; knCipher[ 17 ] = 0xD4; knCipher[ 18 ] = 0x19; knCipher[ 19 ] = 0xBF; knCipher[ 20 ] = 0x8F; knCipher[ 21 ] = 0x00; knCipher[ 22 ] = 0x00; knCipher[ 23 ] = 0x00; knCipher[ 24 ] = 0x00; knCipher[ 25 ] = 0x00; knCipher[ 26 ] = 0x00; knCipher[ 27 ] = 0x00; knCipher[ 28 ] = 0x00; knCipher[ 29 ] = 0x00; knCipher[ 30 ] = 0x00; knCipher[ 31 ] = 0x00; knCipher[ 32 ] = 0x00; knCipher[ 33 ] = 0x00; knCipher[ 34 ] = 0x00; knCipher[ 35 ] = 0x00; knCipher[ 36 ] = 0x00; knCipher[ 37 ] = 0x00; knCipher[ 38 ] = 0x00; knCipher[ 39 ] = 0x00; knCipher[ 40 ] = 0x00; knCipher[ 41 ] = 0x00; knCipher[ 42 ] = 0x00; knCipher[ 43 ] = 0x00; knCipher[ 44 ] = 0x00; knCipher[ 45 ] = 0x00; knCipher[ 46 ] = 0x00; knCipher[ 47 ] = 0x00; knCipher[ 48 ] = 0x00; knCipher[ 49 ] = 0x00; ShowData( "knPlain : ", knPlain, 21 ); ShowData( "knCipher (Pre): ", knCipher, 21 ); TKNuth21_GetTable( &KN21, knPlain, knCipher ); ShowData( "KNuth21_Table : ", KN21.Data, sizeof( KN21.Data ) ); ShowData( "knPlain : ", knPlain, 21 ); ShowData( "knCipher : ", knCipher, 21 ); FindKeys( WKB_SEL_DIRECT, knPlain, knCipher, NULL, ( DWORD * ) Key ); ShowData( "Keys : ", ( BYTE * ) Key, 8 ); //KS.Rounds = 8; //Feal_SetKey( &KS, Key ); //Feal_Encrypt( &KS, Plain ); //ShowData( "Cipher : ", ( BYTE * ) Plain, 8 ); TKNuth21_Init( &KN21, Key[ 0 ], Key[ 1 ] ); ShowData( "KNuth21_Table : ", KN21.Data, sizeof( KN21.Data ) ); ShowData( "knPlain : ", knPlain, 21 ); ShowData( "knCipher (Pre): ", knCipher, 21 ); TKNuth21_Enc( &KN21, knPlain, knCipher, 21 ); ShowData( "knCipher : ", knCipher, 21 ); printf( "----------------------------------------------------------------------------\n" ); knPlain[ 0 ] = 0x00; knPlain[ 1 ] = 0x00; knPlain[ 2 ] = 0x00; knPlain[ 3 ] = 0x00; knPlain[ 4 ] = 0x00; knPlain[ 5 ] = 0x00; knPlain[ 6 ] = 0x00; knPlain[ 7 ] = 0x00; knPlain[ 8 ] = 0x00; knPlain[ 9 ] = 0x00; knPlain[ 10 ] = 0x00; knPlain[ 11 ] = 0x00; knPlain[ 12 ] = 0x00; knPlain[ 13 ] = 0x00; knPlain[ 14 ] = 0x00; knPlain[ 15 ] = 0x00; knPlain[ 16 ] = 0x00; knPlain[ 17 ] = 0x00; knPlain[ 18 ] = 0x00; knPlain[ 19 ] = 0x00; knPlain[ 20 ] = 0x00; knPlain[ 21 ] = 0x00; knPlain[ 22 ] = 0x00; knPlain[ 23 ] = 0x00; knPlain[ 24 ] = 0x00; knPlain[ 25 ] = 0x00; knPlain[ 26 ] = 0x00; knPlain[ 27 ] = 0x00; knPlain[ 28 ] = 0x00; knPlain[ 29 ] = 0x00; knPlain[ 30 ] = 0x00; knPlain[ 31 ] = 0x00; knPlain[ 32 ] = 0x00; knPlain[ 33 ] = 0x00; knPlain[ 34 ] = 0x00; knPlain[ 35 ] = 0x00; knPlain[ 36 ] = 0x00; knPlain[ 37 ] = 0x00; knPlain[ 38 ] = 0x00; knPlain[ 39 ] = 0x00; knPlain[ 40 ] = 0x00; knPlain[ 41 ] = 0x00; knPlain[ 42 ] = 0x00; knPlain[ 43 ] = 0x00; knPlain[ 44 ] = 0x00; knPlain[ 45 ] = 0x00; knPlain[ 46 ] = 0x00; knPlain[ 47 ] = 0x00; knPlain[ 48 ] = 0x00; knPlain[ 49 ] = 0x00; knCipher[ 0 ] = 0x5D; knCipher[ 1 ] = 0xBE; knCipher[ 2 ] = 0x29; knCipher[ 3 ] = 0xD8; knCipher[ 4 ] = 0x49; knCipher[ 5 ] = 0xC8; knCipher[ 6 ] = 0xCB; knCipher[ 7 ] = 0x7F; knCipher[ 8 ] = 0x99; knCipher[ 9 ] = 0x6F; knCipher[ 10 ] = 0xB2; knCipher[ 11 ] = 0xD6; knCipher[ 12 ] = 0x1F; knCipher[ 13 ] = 0x13; knCipher[ 14 ] = 0xEE; knCipher[ 15 ] = 0x17; knCipher[ 16 ] = 0x09; knCipher[ 17 ] = 0x54; knCipher[ 18 ] = 0xD8; knCipher[ 19 ] = 0x58; knCipher[ 20 ] = 0xF3; knCipher[ 21 ] = 0x00; knCipher[ 22 ] = 0x00; knCipher[ 23 ] = 0x00; knCipher[ 24 ] = 0x00; knCipher[ 25 ] = 0x00; knCipher[ 26 ] = 0x00; knCipher[ 27 ] = 0x00; knCipher[ 28 ] = 0x00; knCipher[ 29 ] = 0x00; knCipher[ 30 ] = 0x00; knCipher[ 31 ] = 0x00; knCipher[ 32 ] = 0x00; knCipher[ 33 ] = 0x00; knCipher[ 34 ] = 0x00; knCipher[ 35 ] = 0x00; knCipher[ 36 ] = 0x00; knCipher[ 37 ] = 0x00; knCipher[ 38 ] = 0x00; knCipher[ 39 ] = 0x00; knCipher[ 40 ] = 0x00; knCipher[ 41 ] = 0x00; knCipher[ 42 ] = 0x00; knCipher[ 43 ] = 0x00; knCipher[ 44 ] = 0x00; knCipher[ 45 ] = 0x00; knCipher[ 46 ] = 0x00; knCipher[ 47 ] = 0x00; knCipher[ 48 ] = 0x00; knCipher[ 49 ] = 0x00; ShowData( "knPlain : ", knPlain, 25 ); ShowData( "knCipher (Pre): ", knCipher, 25 ); TKNuth21_GetTable( &KN21, knPlain, knCipher ); ShowData( "KNuth21_Table : ", KN21.Data, sizeof( KN21.Data ) ); ShowData( "knPlain : ", knPlain, 25 ); ShowData( "knCipher : ", knCipher, 25 ); FindKeys( WKB_SEL_DIRECT, knPlain, knCipher, NULL, ( DWORD * ) Key ); ShowData( "Keys : ", ( BYTE * ) Key, 8 ); //KS.Rounds = 8; //Feal_SetKey( &KS, Key ); //Feal_Encrypt( &KS, Plain ); //ShowData( "Cipher : ", ( BYTE * ) Plain, 8 ); TKNuth21_Init( &KN21, Key[ 0 ], Key[ 1 ] ); ShowData( "KNuth21_Table : ", KN21.Data, sizeof( KN21.Data ) ); ShowData( "knPlain : ", knPlain, 21 ); ShowData( "knCipher (Pre): ", knCipher, 21 ); TKNuth21_Enc( &KN21, knPlain, knCipher, 21 ); ShowData( "knCipher : ", knCipher, 21 ); } // -------------------------------------------------------------------------- //hier noch der Header Knuth:
// -------------------------------------------------------------------------- // // // -------------------------------------------------------------------------- // #include <Windows.h> // -------------------------------------------------------------------------- // typedef struct { DWORD dwSize; // 04 DWORD dwIndex01; // 08 DWORD dwIndex00; // 0C BYTE Data[ 50 ]; } TKNuth, * PKNuth; typedef struct { BYTE Data[ 20 ]; } TKNuth20, * PKNuth20; typedef struct { BYTE Data[ 21 ]; } TKNuth21, * PKNuth21; typedef struct { BYTE Data[ 47 ]; } TKNuth47, * PKNuth47; // -------------------------------------------------------------------------- // void TKNuth_Init( PKNuth pKN, DWORD dwSize ); void TKNuth_Enc( PKNuth pKN, BYTE * Buffer, DWORD dwCount ); void TKNuth20_Init( PKNuth pKN, DWORD KeyL, DWORD KeyR ); void TKNuth20_Enc( PKNuth20 pKN, BYTE * Plain, BYTE * Cipher, DWORD dwCount ); void TKNuth21_Init( PKNuth21 pKN, DWORD KeyL, DWORD KeyR ); void TKNuth21_Enc( PKNuth21 pKN, BYTE * Plain, BYTE * Cipher, DWORD dwCount ); void TKNuth47_Enc( PKNuth47 pKN, BYTE * Plain, BYTE * Cipher, DWORD dwCount ); // -------------------------------------------------------------------------- //anbei der Fehlercode:
1>------ Erstellen gestartet: Projekt: GK_feal, Konfiguration: Release Win32 ------ 1>Der Buildvorgang wurde am 20.12.2011 14:38:36 gestartet. 1>InitializeBuildStatus: 1> Aktualisieren des Timestamps von "Release\GK_feal.unsuccessfulbuild". 1>ClCompile: 1> Alle Ausgaben sind aktuell. 1>ResourceCompile: 1> Alle Ausgaben sind aktuell. 1>wkwin32.lib : warning LNK4003: Ungültiges Bibliotheksformat; Bibliothek wird ignoriert. 1>wkwin32.lib : warning LNK4003: Ungültiges Bibliotheksformat; Bibliothek wird ignoriert. 1>GK_FEAL.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TKNuth21_Enc". 1>GK_FEAL.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TKNuth21_Init". 1>GK_FEAL.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_TKNuth20_Enc". 1>c:\users\home\documents\visual studio 2010\Projects\GK_feal\Release\GK_feal.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.anbei alles als rar datei
http://www.megaupload.com/?d=IPDI6ZE8ich hoffe ihr könnt mir helfen-bin schon gespannt
Viele Gruße
lopogus
-
Du hast da offenbar nicht den vollen Sourcecode. Ein Teil ist in einer Library, mit der dein Compiler nichts anfangen kann: «wkwin32.lib : warning LNK4003: Ungültiges Bibliotheksformat; Bibliothek wird ignoriert.»
-
danke für die schnelle Antwort.
hmm; nur wenn ich die datei ´rausnehme dann kommt folgende Fehlermeldung:
ich bin mir ziemlich sicher, das der code vollständig isthier die fehlermeldung bei gelöscht wkwin32.lib
1>------ Erstellen gestartet: Projekt: GK_feal, Konfiguration: Release Win32 ------ 1>Der Buildvorgang wurde am 20.12.2011 15:00:48 gestartet. 1>InitializeBuildStatus: 1> Aktualisieren des Timestamps von "Release\GK_feal.unsuccessfulbuild". 1>ClCompile: 1> Alle Ausgaben sind aktuell. 1>ResourceCompile: 1> Alle Ausgaben sind aktuell. 1>LINK : fatal error LNK1104: Datei "wkwin32.lib" kann nicht geöffnet werden. 1> 1>Fehler beim Erstellen 1> 1>Verstrichene Zeit 00:00:00.16 ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
???
OK, dann halt nochmal etwas ausführlicher: Das Projekt besteht zum Teil aus einer vorkompilierten Library, zu der du den Quelltext anscheinend nicht hast. Dein Compiler (bzw. dessen Linker) kann diese Library nicht verarbeiten, also fehlen die darin enthaltenen Bestandteile. Die Library deswegen zu löschen ist relativ sinnfrei, das ändert ja nichts daran, dass du sie brauchst.
Falls du den Quelltext dafür doch hast, solltest du versuchen, sie neu zu bauen. Ansonsten solltest du den Quelltext besorgen und sie bauen, oder den originalen Autor ausfindig machen. Eventuell gibt es davon auch eine neuere Version. Oder was weiß ich

-
Ok Danke,
das werde ich versuchen. Die Quelldatei habe ich ja noch. Danke
Darf ich dich nochmal anschreiben sollte ich auch dabei nicht weiter kommen.Nochmals vielen Danke für deine Info
VG lopogus
-
Beim Borland-Builder gibt es ein Tool 'coff2omf', um Libs umzuwandeln. Ich weiß aber nicht, ob es auch in die andere Richtung "Borland -> Microsoft" (omf2coff) geht.
P.S: Da hat ja ein echter Crack an dem Projekt gearbeitet, z.B. wie die Arrays knPlain und knCipher initialisiert werden.

-
Das Problem liegt in den verschiedenen .lib Dateiformaten. Microsoft benutzt COFF, Borland/Codegear/Embarcadero hingegen OMF. Die jeweiligen Linker können mit dem fremden Bibliotheksformat nichts anfangen, daher die Fehlermeldung. B/C/E liefern mit ihrer IDE ein Tool namens COFF2OMF, um die COFF Bibliothek in´s OMF Format zu bringen. Ob es ein OMF2COFF Tool gibt weiß ich nicht, das sollte bei google ´ne Frage wert sein.
Edit:
Um 3 Sekunden geschlagen
-
kann das di editbin.exe von ms visual auch?
ich habe das tool omf2coff im netz gefunden-nur halt kein download link.
Und v.a. keine anleitung how to use it
Könnt ihr weiterhelfen?
-
Vielleicht
omf2coff /?
-
Wieso wollt ihr ihn die Bibliothek konvertieren lassen wenn er den Sourcecode hat?
Einfach den Source ins Projekt hinzufügen und gut.
-
Den Sourcecode wird er wahrscheinlich nicht haben. Es handelt sich bei wkwin32.dll (bzw. .lib) um eine Bibliothek, die mit dem Treiber für WibuKey-Kopierschutzdongles spricht, also höchst proprietäres Zeug. Womöglich kriegt man das aber auf der Wibu-Webseite im Binärformat runtergeladen, im Zweifel hier.
-
wie schon gesagt, ich habe den source code.
ich werde es versuchen ihn hinzuzufügenvg
-
@lopogus18
und hast es hinbekommen ?
soviel ich weiss ist dieser source für Borland c++ V5