Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

MisteRSharK

Tripel-As

Dabei seit: 06.11.2002

Beiträge: 153

 

1 Zum Seitenanfang

Dienstag, 3. März 2009, 22:57

c++ UND c# profis hier? Brauche Übersetzung...

Hi@All,

Gibt es hier c++ und c# Profis?

Ich bräuchte mal folgenden Code Abschnitt übersetzt (am allerbesten mit erklärung):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#include <cstdlib>
#include <cstdio>
#include <cerrno>

#include <fstream>
#include <sstream>

#include <string>

#include <iterator>

#include <algorithm>

#include "md5.hpp"

using namespace std;

string read(const string & name);

size_t write(const string & blob, const string & name);

size_t backup(const string & name);

string encode(const string & blob);

string decode(const string & blob);

string md5sum(const string & blob);

size_t replace(string & blob, const string & what, const string & with);

struct xor8d { char operator()(char c) { return c ^ 0x8d; } };

int main(int argc, char * argv[])
{
if (argc < 4) { fprintf(stderr, "\n\tI miss some input, dude!\n"); return 1; }

try
{
if (strcmp(argv[1], "-d") == 0)
{
//
// just decrypt a file
//

if (strcmp(argv[2], argv[3]) == 0) throw exception("input and output file is the same");

string in = read(argv[2]);

string out = decode(in);

backup(argv[3]);

write(out, argv[3]);
}
else
{
//
// mod room's data
//

// get md5 digest of destination file

string orig = read(argv[2]);

string d1 = md5sum(orig);

// overwrite destination file with new one

string in = read(argv[3]);

string out = encode(in);

backup(argv[2]);

write(out, argv[2]);

// get md5 digest of new file

string d2 = md5sum(out);

// replace old md5 digest with new in fileinfo

string path = argv[1];

path = path.substr(0, path.find_last_of("\\/") + 1);

string fi1name = path + "./fileinfo2.dat";
string fi2name = path + "./fileinfo2r.dat";

string fi1 = read(fi1name);
string fi2 = read(fi2name);

string x1;
string x2;

transform(d1.begin(), d1.end(), back_inserter(x1), xor8d());
transform(d2.begin(), d2.end(), back_inserter(x2), xor8d());

replace(fi1, x1, x2);
replace(fi2, x1, x2);

backup(fi1name);
backup(fi2name);

write(fi1, fi1name);
write(fi2, fi2name);
}
}
catch (exception e)
{
fprintf(stderr, "\n\tError: %s\n", e.what());

return 2;
}

return 0;
}

string read(const string & name)
{
ifstream is(name.c_str(), ios_base::binary);

if (is.fail()) throw exception("can't open input file");

string s;

copy(istreambuf_iterator<char>(is), istreambuf_iterator<char>(), back_inserter(s));

return s;
}

size_t write(const string & blob, const string & name)
{
ofstream os(name.c_str(), ios_base::binary | ios_base::trunc);

if (os.bad()) throw new exception("can't create output file");

copy(blob.begin(), blob.end(), ostreambuf_iterator<char>(os));

return 1;
}

size_t backup(const string & name)
{
if (rename(name.c_str(), (name + ".bak").c_str()) == 0)
{
return 0;
}
else
{
errno_t err;

_get_errno(&err);

return err;
}
}

// encoding

string encode(const string & blob)
{
char prefix[] = { 0x43, 0x46, 0x31, 0x30, 0x00 };

string s(prefix);

transform(blob.begin(), blob.end(), back_inserter(s), xor8d());

return s;
}

string decode(const string & blob)
{
if (blob.size() < 4) throw exception("invalid input");

string s;

transform(blob.begin() + 4, blob.end(), back_inserter(s), xor8d());

return s;
}

string md5sum(const string & blob)
{
md5_state_t st;

MD5::init(&st);

MD5::append(&st, (const md5_byte_t *)&blob[0], (unsigned int)blob.size());

md5_byte_t dig[17] = {0};

MD5::finish(&st, dig);

return string((char *)dig, 16);
}

size_t replace(string & blob, const string & what, const string & with)
{
size_t c = 0;

size_t n = 0;

while (true)
{
n = blob.find(what, n);

if (n == string::npos) break;

blob.replace(n, with.size(), with);

c++;

n += with.size();
}

return c;
}


Sollte noch Code unklar sein, ich habe nur die wichtigsten abschnitte aus dem original Source genommen.

//Edit: So, hab mal den ganzen source reinkopiert. Ich weiß was das Tool macht (also hauptsächlich eine Datei Bitweise mit xor #8d bearbeiten und um diefe fuktion gehts mir hauptsächlich).

Also ich arbeite mit MS C# Express 2008 und wollte die Funktion eigentlich in eine Windows Form mit einbauen. Also es soll nicht Konsole sein.

Vielen vielen dank!
MisterShark
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »MisteRSharK« (4. März 2009, 13:02)

 

okki

unregistriert

2 Zum Seitenanfang

Mittwoch, 4. März 2009, 00:44

ich geh mal davon aus, du weißt was das programm macht und willst den quelltext nur von c++ nach c# übersetzen?
grüße okki
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 997

 

3 Zum Seitenanfang

Mittwoch, 4. März 2009, 09:16

hi viele sachen kann man nicht übersetzen weil du nur die void main() hier gepostet hast. und da werden hauptsächlich strings durch funktionen gejagt und ausgegeben oder in eine datei geschrieben. wir brauchen schon den kompletten quellcode(wobei ich ehrlich gesagt nicht genau weis ob bei c# der startparameter argv exestiert), denn wenn nicht dann kann man den code eigentlich nicht übersetzen

MFG
Mein kleines Projekt
-Cruel Online-
 

Dabei seit: 28.09.2007

Beiträge: 967

 

4 Zum Seitenanfang

Mittwoch, 4. März 2009, 10:15

Zitat

(wobei ich ehrlich gesagt nicht genau weis ob bei c# der startparameter argv exestiert)

Bei Konsolenanwednungen gibt es es glaub ich:

PHP-Quelltext

1
2
3
static void Main(string[] args)
        {
        }

Bei Anwendungen mit WindowsForms gibt es es glaube ich nicht.

ak
 

MisteRSharK

Tripel-As

Dabei seit: 06.11.2002

Beiträge: 153

 

5 Zum Seitenanfang

Mittwoch, 4. März 2009, 13:09

So, hab mal den ganzen Code mal rangehängt
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com
 

Dabei seit: 08.08.2005

Beiträge: 1 001

 

6 Zum Seitenanfang

Mittwoch, 4. März 2009, 18:30

Hallo!
Ich weis jetzt nicht ganz genau was du genau haben willst, aber das ist kein C# Code.
Bei C# werden Bibliotheken mit "using ..." eingebunden.
Ich denke einmal das es C, oder C++ ist.
Und ich hab echt keinen Plan was das für ein Code sein sollte.
Mit ein paar mehr Infos von dir wäre und besser geholfen, eventuell woher du den Code hast etc.
Grüße
 

Dabei seit: 18.05.2006

Beiträge: 624

 

7 Zum Seitenanfang

Mittwoch, 4. März 2009, 19:44

C# ist es kein und C++ auch nicht.
Ist ganz normales C.

Und was willst du jetzt genau haben?
Da sind eh //Kommentare dabei, die sollten dir schon auf die Sprünge helfen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Super_Frettchen« (4. März 2009, 19:49)

 

MisteRSharK

Tripel-As

Dabei seit: 06.11.2002

Beiträge: 153

 

8 Zum Seitenanfang

Mittwoch, 4. März 2009, 23:08

Sry... Ist C++ und soll nach C# übersetzt werden.

Das Programm nimmt jpeg Dateien und mach folgendes:

Quellcode

1
2
3
4
5
6
7
char prefix[] = { 0x43, 0x46, 0x31, 0x30, 0x00 };

string s(prefix);

transform(blob.begin(), blob.end(), back_inserter(s), xor8d());

return s;


So wie ich das verstehe wird vor die jpeg an sich die Hexwerte 0x43, 0x46, 0x31, und 0x30 nachdem die Datei byte für byte mit xor 0x8D verarbeitet wird.
Anschaulich:



Quellcode

1
2
3
4
5
XOR  xxxx xxxx        xxxx xxxx        xxxx xxxx
72 - 0111 0010 | 55 - 0101 0101 | 72 - 0111 0010
8D - 1000 1101 | 8D - 1000 1101 | 8D - 1000 1101
=============================================
FF - 1111 1111 | D8 - 1101 1000 | FF - 1111 1111


Sooo... Nun kann ich aber leider nichts mit transform, blob und ähnliches anfangen, da ich soweit nicht mit C/C++ vertraut bin.
Ich hoffe ihr könnt mir weiter helfen, zumindest dieses eine Stück, denn dann werde ich den Rest auch alleine schaffen.

MisterShark
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

9 Zum Seitenanfang

Donnerstag, 5. März 2009, 00:39

C# ist es kein und C++ auch nicht.
Ist ganz normales C.

Auch falsch, es ist C++.

Warum packst du den ganzen C++ code nicht in eine DLL und nutzt diese aus C#? :evil:
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »silence« (5. März 2009, 01:38)

 

MisteRSharK

Tripel-As

Dabei seit: 06.11.2002

Beiträge: 153

 

10 Zum Seitenanfang

Donnerstag, 5. März 2009, 11:45

Dies habe ich auch in einem Expliziten C# Forum gefragt ob dies möglich wär (mycsharp.de: C++ Code als Bibiliothek in C# einbinden?).

Dort sagte man mir es wäre nicht möglich, wenn es nicht in nativen C geschrieben wäre.

Also wenn dies möglich wäre, wäre es natürlich super zu wissen wie :)

MisterShark
Risikofrei mit bis zu $50+$100 kostenlosem Startkapital eine Pokerkarriere starten bei PokerStrategy.com

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisteRSharK« (5. März 2009, 11:51)

 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

11 Zum Seitenanfang

Donnerstag, 5. März 2009, 15:58

Jain - was die Leute im Forum wohl meinten ist, das dllexport mit C++ funktion/klassen/templates decorated function names erzeugt.
D.h. aus

Quellcode

1
2
3
4
int __stdcall __declspec(dllexport) A() 
{
    //bla 
}
wird in der export section nicht A sondern etwas in der Richtung: ?a@@YAHD@Z
Dann müsste man also entweder in C# statt den Funktionsnamen A einfach ?a@@YAHD@Z verwenden, oder die funktion mit extern "C" exportieren:

Quellcode

1
2
3
4
5
6
7
extern "C" 
{
    int __stdcall __declspec(dllexport) A() 
    {
        //bla 
    }
}


Wenn das ganze aber wirklich so funktioniert wie du beschrieben hast, ist es ganz einfach in C# zu lösen (ungetestet):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
try
{
    FileStream fStream = File.Open("MyFile.jpg", System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
    Int32 nCount = (Int32)fStream.Length;
    byte[] ucBuffer = new byte[nCount];
    fStream.Read(ucBuffer, 0, nCount);
    for (int i = 0; i < fStream.Length; i++)
        ucBuffer[i] ^= 0x8d;
    fStream.Position = 0;
    fStream.WriteByte(0x43);
    fStream.WriteByte(0x46);
    fStream.WriteByte(0x31);
    fStream.Write(ucBuffer, 0, nCount);
    fStream.Flush();
    fStream.Close();
}
catch (Exception ex)
{
    //TODO: Exception handling ;-)
}
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog