PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : binary > source


Unregistered
2003-02-20, 22:23:20
kann man eigentlich binary in Sourcecode umwandeln????

Demirug
2003-02-20, 22:35:59
Das hängt stark vom benutzten Compiler ab. Aber 100% den Ursprungscode kann man auf keinen Fall wieder herstellen.

Darkstar
2003-02-20, 22:39:51
Das ist durchaus möglich, allerdings ist der Aufwand hierfür ziemlich groß (siehe „reverse engineering“ (http://whatis.techtarget.com/definition/0,,sid9_gci507015,00.html)).

stabilo_boss13
2003-02-20, 22:48:08
Originally posted by Unregistered
kann man eigentlich binary in Sourcecode umwandeln????
Du kannst natürlich jedes Binary (exe, dll, obj...) mit einem Debugger (z.B. GDB) anschauen. Dann siehst du den reinen Assemblercode.
Wenn du jetzt aber wissen willst, ob du z.B. ein Exefile in den entsprechenden C++ Sourcecode zurückverwandeln kannst: Leider nicht!

Es gibt ein paar Hilfsprogramme, aber stell dir nur mal die Variablennamen vor. Ich schreib z.B. in meinem Sourcecode: iNonPlayerCaracter=0. Daraus macht der Compiler dann sowas wie: mov ah,0. Oder der Lesbarkeit wegen geschriebene Konstrukte wie: x=5+(8*4)-7 rationalisiert der Compiler einfach weg: mov ah,30. Oder Schleifen, oder...

Du siehst, das ist nicht so einfach. Außerdem schützen viele professionelle Entwickler ihren Code gegen Debugging.

Aber es gibt auch Ausnahmen:
Sollte das Programm in Visual Basic geschrieben sein, dann kannst du das mit Hilfe eines Decompilers oft wieder sichtbar machen. Für .Net-Programme (wie z.B. C#) liefert Microsoft sogar den Decompiler(IL) mit.

Demirug
2003-02-20, 22:51:15
Der .Net "Decompiler" erzeugt aber nur lessbaren MSIL Code was auch nur eine Art von Assembler ist. Den C# Code bekommt man damit auch nicht mehr. Es gibt aber ein paar Tools die ansatzweise auch wieder C# Code erzeugen können.

Edit: Und bei VB funktioniert das auch nur bei den alten Versionen bei VB6 geht das auch nicht mehr richtig.

stabilo_boss13
2003-02-21, 15:57:59
@Threadstarter

Hier mal ein Beispiel aus C#:

class MainClass
{
public static void Main(string[] args)
{
float x=0;
x++;
Console.WriteLine("Hello World!");
}
}

Und das wird dann im IL Disassembler draus:

.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 26 (0x1a)
.maxstack 2
.locals init ([0] float32 x)
IL_0000: ldc.r4 0.0
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: ldc.r4 1.
IL_000c: add
IL_000d: conv.r4
IL_000e: stloc.0
IL_000f: ldstr "Hello World!"
IL_0014: call void [mscorlib]System.Console::WriteLine(string)
IL_0019: ret
} // end of method MainClass::Main