PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm rekompilieren oder wieder aufdröseln



spawn
04.05.2005, 19:37
Hi Leute!

Ich hab hier son Programm, welches ich mir im Dev-C++-Editor angesehn hab. Da steht dann allerdings nur unbrauchbares Zeug. Liegt das daran, dass es kompiliert ist? Naja, jedenfalls würde ich den Source-Code gern ma lesbar machen, um mir den Aufbau anzusehen. Ist das möglich?

Danke, spawn

Lukas
04.05.2005, 19:40
Ja, kompilierte Programme sind Binärdateien (dieses unlesbare Zeug).
Dekompilieren kann man nicht so einfach, du könntest es höchstens mit einem Disassembler versuchen. Der spuckt aber nur Assemblercode aus.

spawn
04.05.2005, 19:45
Wo bekomm ich son disassembler her?
und inwiefern ist der code dann nutzbar?

dadie
04.05.2005, 19:53
Es gibt aber auch Decompiler

Leider zerfetzten die min.20 bis 80% des Codes zumindest war es so mit allen die ich bisher hatte.

Leider habe ich keinen Link zueinem Cpp Decompiler

Crash-Override
04.05.2005, 19:58
Google ist dein Freund und da wir seid neustem ne Google-Leiste im Forum haben wirds noch einfacher...

ASM (Assmebler) Code wird für dich sicher nicht nutzbar sein, da ich du wohl keine Ahnung da von hast (Annahme, aber wenn dus chon nicht weist was n'Ä Dissassembler ist ...)

Assembler-Code sieht etwa so aus:



org 0x7C00 ; Unsere Startadresse

start:
cli
mov ax, 0x9000
mov ss, ax
mov sp, 0
sti

mov [bootdrv], dl

call load

mov ax, 0x1000
mov es, ax
mov ds, ax
push ax
mov ax, 0
push ax
retf

load:
push ds
mov ax, 0
mov dl, [bootdrv]
int 13h
pop ds
jc load

load1:
mov ax,0x1000
mov es,ax
mov bx, 0

mov ah, 2
mov al, 5
mov cx, 2
mov dx, 0
int 13h
jc load1
retn

times 512-($-$$)-2 db 0
dw 0AA55h

Und wer mir sagt was der Code bewirkt bekommt die Adresse wo ich ihn her hab :D

codec
04.05.2005, 22:21
org 0x7C00 ; Unsere Startadresse

start:
cli
mov ax, 0x9000
mov ss, ax
mov sp, 0
sti

mov [bootdrv], dl

call load

mov ax, 0x1000
mov es, ax
mov ds, ax
push ax
mov ax, 0
push ax
retf

load:
push ds
mov ax, 0
mov dl, [bootdrv]
int 13h
pop ds
jc load

load1:
mov ax,0x1000
mov es,ax
mov bx, 0

mov ah, 2
mov al, 5
mov cx, 2
mov dx, 0
int 13h
jc load1
retn

times 512-($-$$)-2 db 0
dw 0AA55h

Und wer mir sagt was der Code bewirkt bekommt die Adresse wo ich ihn her hab :D

Ich tippe auf ein.. Wie schreibe ich mein eigenes OS-Tutorial oder so.
Oder eben dein eigens Dings was du da zusammenschusterst. Zumindest kommt mir der Code bekannt vor, ich hatte mal was fuer den C64 ausprobiert, sah so aehnlich aus. IIRC.


Bla, war klar. Ist von nem Bootloader.

Crash-Override
04.05.2005, 22:33
Boar, kommt verdammt nahe. Das Teil ist ein Bootsector. Wenn man ihn in den bootsector von ner Diskette schrteibt und davon bootet sorgt dieser Code dafür das die nächsten 5 Sektoren (1 Sektor = 512 Byte) in den Arbeitsspeicher geladen werden [Man beachte: Real Mode, das heißt maximal Adressierungen von 1024 KByte, das heißt nur 1 MB nutzbar, selbst wenn man 256 MB oder mehr hat...] und dannach ausgeführt werden. Als Quelle verweis ich auf LL #1 (http://lowlevel.brainsware.org/index.php?pagename=tutorials&showtut_id=1)

Jesus_666
05.05.2005, 01:48
Es gibt aber auch Decompiler

Leider zerfetzten die min.20 bis 80% des Codes zumindest war es so mit allen die ich bisher hatte.

Leider habe ich keinen Link zueinem Cpp Decompiler
Du wirst wohl auch kaum einen finden... Man kann Maschinencode problemlos in Assemblercode übersetzen (Diassembler) und Assemblercode kann auch mehr oder weniger problemlos in C-Code übersetzt werden - es ist also auch möglich, Maschinen- in C-Code umzurechnen. C++ halte ich aber für unwahrscheinlich; immerhin geht der ganze HLL-Kram zu großen Teilen verloren, wenn man's in Maschinencode umwandelt.
Möglich wär's, aber irgendwie würde es meines Erachtens nach nicht fürchterlich viel Sinn machen.

codec
05.05.2005, 19:57
Boar, kommt verdammt nahe. Das Teil ist ein Bootsector. Wenn man ihn in den bootsector von ner Diskette schrteibt und davon bootet sorgt dieser Code dafür das die nächsten 5 Sektoren (1 Sektor = 512 Byte) in den Arbeitsspeicher geladen werden [Man beachte: Real Mode, das heißt maximal Adressierungen von 1024 KByte, das heißt nur 1 MB nutzbar, selbst wenn man 256 MB oder mehr hat...] und dannach ausgeführt werden. Als Quelle verweis ich auf LL #1 (http://lowlevel.brainsware.org/index.php?pagename=tutorials&showtut_id=1)

Bootloader oder Bootsector ist im Prinzip doch das gleiche.
Der Bootloader befindet sich auch in den ersten paar Sektoren der Festplatte (MBR) und sorgt dafür das (für Linux) die Kernelimages geladen werden.
Wie das genau funktioniert weis ich nicht, interessiert mich auch nicht wirklich, ich hab mein OS Projekt verworfen.

Hm, eigentlich totaler Stuss was ich da schreibe... der Bootsector macht das laden des Bootloaders ja erst mögich...


@Topic:

Also Disassembling ist ne dreckige Sache, wenn man keinen guten Disassembler hat der keine Kommentare setzt hat man so gut wie verloren.
Und wenn man VisualBasic Programme disassemblieren will kann man das auch
vergessen. Solche Disassembler haben die Jungs bei den Antiviren Herstellern, ist meist hausinterne Software, an sowas kommt man leider nicht bzw nur schwer.

BTW, will jemand disassemblies vom neuen Sober Wurm? :3 *protz*

Rolus
05.05.2005, 20:46
Ja, Disassembling ist wirklich eine undankbare Sache. Wenn man sich denkt, dass man eben mal nen' Spiel disassemblieren und dann daraus lesen kann, sollte man das schnell wieder vergessen.
Kleine Programme kann man mal disassemblen und daraus auch ohne Kommentare lesen. Zum Beispiel welche Interrupts/System Calls verwendet werden, das kann einem helfen, wenn man beispielsweise die System Funktionen umbiegen will oder ein ähnliches Vergehen plant. ;)
So ein Zeug mit Ints usw. bleibt ja im Code enthalten. Also kleine Dinge kann man durch's Disassemblieren schon erfahren, wenn man zum Beispiel, wie beim Virenscan, nach etwas Bestimmtem sucht. Aber zum Überblicken großer Programme ist es eher nichts.

freundliche Grüße, Rolus

DFYX
05.05.2005, 20:48
BTW, will jemand disassemblies vom neuen Sober Wurm? :3 *protz*

Nein danke. Würmer werden bitte schön komplett selber geschrieben und nicht einfach nur modifiziert.

@topic:

Disassemblieren halte ich normalerweise für arg unsportlich. Wenn jemand seinen Sourcecode nicht freigeben will, wird er seine Gründe haben.

@spawn:

Was für ein Projekt isses denn? Vielleicht können wir dir ja auch so weiterhelfen.

codec
06.05.2005, 18:52
Nein danke. Würmer werden bitte schön komplett selber geschrieben und nicht einfach nur modifiziert.

Ich hab echt besseres zu tun als Würmer zu modifizieren (was sowieso ziemlich lahm ist, finde ich zumindest).
Aber lassen wir das ma, geht zu off topic ;)