Discussion:
Vergleich Quellcode <-> Binärcode
(zu alt für eine Antwort)
Florian Burger
2004-01-09 13:54:27 UTC
Permalink
Hallo,

ich bin auf der Suche nach Anschauungsmaterial, das den Unterschied
zwischen Quellcode und Binärcode darstellt.

Kennt jemand von euch eine Seite, auf der ein (einfaches) Programm
(vielleicht sogar das "Hallo, Welt"-Programm) in mehreren
Programmiersprachen, insbesondere in einer höheren und in Binärcode zum
Vergleich zu finden ist?

Florian
Thomas Guettler
2004-01-09 13:57:45 UTC
Permalink
Post by Florian Burger
Hallo,
ich bin auf der Suche nach Anschauungsmaterial, das den Unterschied
zwischen Quellcode und Binärcode darstellt.
Kennt jemand von euch eine Seite, auf der ein (einfaches) Programm
(vielleicht sogar das "Hallo, Welt"-Programm) in mehreren
Programmiersprachen, insbesondere in einer höheren und in Binärcode zum
Vergleich zu finden ist?
Was willst du vergleichen?

Dateien vergleicht man unter unix mit dem Befehl "diff".
Doch das ist bestimmt nicht, was du suchst.

Wenn du den Quelltext von verschiedenen Programmiersprachen
vergleichen willst, dann: http://pleac.sf.net/

Schönes Wochenende,
thomas
Marco Schmidt
2004-01-09 15:50:58 UTC
Permalink
Florian Burger:

[...]
Post by Florian Burger
Kennt jemand von euch eine Seite, auf der ein (einfaches) Programm
(vielleicht sogar das "Hallo, Welt"-Programm) in mehreren
Programmiersprachen, insbesondere in einer höheren und in Binärcode zum
Vergleich zu finden ist?
Auf <http://www.bagley.org/~doug/shootout/bench/hello/> findest Du
Hello-World-Programme in allen möglichen Sprachen (in der Tabelle
links in der Spalte "Source Code").

Assembler- bzw. Maschinencode müßtest Du noch selbst schreiben.

Dieser "Language Shootout" hat auch weitere Programme in vielen
Sprachen: <http://www.bagley.org/~doug/shootout/index2.shtml>.

"Hallo Welt" halte ich für nicht so geeignet, da es doch nur ein
API-Aufruf ist. Vielleicht besser eine einfache Berechnung (z.B.
Fakultät).

Gruß,
Marco
Florian Burger
2004-01-11 17:17:49 UTC
Permalink
Post by Florian Burger
ich bin auf der Suche nach Anschauungsmaterial, das den Unterschied
zwischen Quellcode und Binärcode darstellt.
Kennt jemand von euch eine Seite, auf der ein (einfaches) Programm
(vielleicht sogar das "Hallo, Welt"-Programm) in mehreren
Programmiersprachen, insbesondere in einer höheren und in Binärcode zum
Vergleich zu finden ist?
Danke für die bisherigen Antworten.

Ich (kein Programmierer) möchte meinen Studierenden (der
Rechtswissenschaften, nicht der Informatik) zeigen, was man unter
"Programm" verstehen kann. Deshalb dachte ich an den Quellcode
irgendeines Programms in einer höheren Programmiersprache, das vom
Menschen einigermaßen noch verstanden werden kann, da ja mitunter
verständliche Worte verwendet werden ("if...then...else"; ich erinnere
mich sogar an eine VBA-Version, die ebenfalls regionalisiert, also
eingedeutscht wurde ["wenn...dann...sonst"]). Dann dasselbe Programm
eventuell als Assembler, für Menschen schon schwieriger verständlich,
umso leichter aber für die Maschine. Und letztlich dasselbe Programm als
reiner Binärcode, für Menschen praktisch überhaupt nicht mehr
verständlich, für die Maschine aber genau das "Richtige". Alles aber ein
und dasselbe Programm.

Kennt jemand im Internet einen solchen Vergleich?

Florian
Georg Bauhaus
2004-01-12 01:14:51 UTC
Permalink
Florian Burger <***@aon.at> wrote:

: [Quellcode, Assembler, Binaerprogramm] Alles aber ein
: und dasselbe Programm.

Ich bin nicht sicher ob hier von dem selben Programm die Rede
sein kann. Sowohl aus Informatik-formaler Sicht kann das schief gehen,
als auch m.W. aus urheberechtlicher Sicht. Was etwa, wenn
ein patentierter Algorithmus, geschrieben als Quellprogramm
Q1, nach Uebersetzung den selben Binaercode liefert, wie Formulierung
Q2, zu der es keine Patentansprueche gibt? (Mit einer geeigneten
Definition von "den selben" landet man dann wohl beim derzeitigen
Streit zwischen den Lizensierern von SCO und den Lizensierern von
Linux.)


Georg
Martin Klaiber
2004-01-12 12:28:15 UTC
Permalink
Post by Florian Burger
Ich (kein Programmierer) möchte meinen Studierenden (der
Rechtswissenschaften, nicht der Informatik) zeigen, was man unter
"Programm" verstehen kann.
Da kann man viel darunter verstehen. Ein Kochrezept ist auch eine Art
Programm. Und auch unser Denken könnte man als Programm bezeichnen, es
enthält ähnliche Elemente, z.B. Entscheidungen: (gehe ich Einkaufen?),
Verzweigungen (wenn ja, dann gibt's was zum Essen), aber auch höhere
Konstrukte wie Objekte und Klassen.
Post by Florian Burger
Deshalb dachte ich an den Quellcode irgendeines Programms in einer
höheren Programmiersprache, das vom Menschen einigermaßen noch
verstanden werden kann, da ja mitunter verständliche Worte verwendet
werden ("if...then...else"; ich erinnere mich sogar an eine
VBA-Version, die ebenfalls regionalisiert, also eingedeutscht wurde
["wenn...dann...sonst"]). Dann dasselbe Programm eventuell als
Assembler, für Menschen schon schwieriger verständlich, umso
leichter aber für die Maschine.
Ein Assembler-Programm ist für den Rechner genauso unverständlich wie
ein Programm in einer Hochsprache. Es gibt aber auch Prozessoren, die
Hochsprachen verstehen können, IIRC für Java und Basic. Kürzlich lief
hier ein Thread zu Maschinen (Symbolics), die Lisp verstehen. Und ich
meine, dass es auch mal in Forth programmierbare Prozessoren gab.
Post by Florian Burger
Und letztlich dasselbe Programm als reiner Binärcode, für Menschen
praktisch überhaupt nicht mehr verständlich, für die Maschine aber
genau das "Richtige". Alles aber ein und dasselbe Programm.
Wie Georg schon schrieb: das gilt bestenfalls in einer Richtung,
nämlich von der Hochsprache zur Maschinensprache. Aus Maschinencode
kann man das ursprüngliche Hochsprachenprogramm nicht mehr eindeutig
rekonstruieren.
Post by Florian Burger
Kennt jemand im Internet einen solchen Vergleich?
Zumindest mir ist noch nicht klar, worauf es Dir ankommt. Vielleicht
solltest Du das noch etwas deutlicher herausstellen. Wenn Du damit
'beweisen' willst, dass zwischen dem Quelltext in der Hochsprache und
dem daraus erzeugten Maschinencode ein 1:1 Zusammenhang besteht, dann
ist die Annahme leider falsch, sorry.

Martin
Martin Klaiber
2004-01-12 12:43:58 UTC
Permalink
Post by Martin Klaiber
Post by Florian Burger
Und letztlich dasselbe Programm als reiner Binärcode, für Menschen
praktisch überhaupt nicht mehr verständlich, für die Maschine aber
genau das "Richtige". Alles aber ein und dasselbe Programm.
Wie Georg schon schrieb: das gilt bestenfalls in einer Richtung,
nämlich von der Hochsprache zur Maschinensprache.
Eigentlich kann man auch das nicht garantieren. Bei Mikrocontrollern
(eine Art Kleinstcomputer, z.B. in Waschmaschinen, Motorsteuerungen,
u.ä.) verwendet man häufig Schleifen die nichts tun, um eine bestimmte
Zeitverzögerung zu erreichen. Compiler können aber optimieren, so ein
Compiler würde also erkennen, dass da eigentlich gar nichts gemacht
wird, außer Zeit zu 'verplempern' und würde die Schleife wegoptimieren.

Martin
Henrik Motakef
2004-01-12 12:58:23 UTC
Permalink
Es gibt aber auch Prozessoren, die Hochsprachen verstehen können,
IIRC für Java und Basic. Kürzlich lief hier ein Thread zu Maschinen
(Symbolics), die Lisp verstehen.
Die verstehen auch nicht die Quelltexte, wie sie ein Mensch schreiben
würde. Kompilieren muss man trotzdem.
Martin Klaiber
2004-01-12 14:21:33 UTC
Permalink
Post by Henrik Motakef
Es gibt aber auch Prozessoren, die Hochsprachen verstehen können,
IIRC für Java und Basic. Kürzlich lief hier ein Thread zu Maschinen
(Symbolics), die Lisp verstehen.
Die verstehen auch nicht die Quelltexte, wie sie ein Mensch schreiben
würde. Kompilieren muss man trotzdem.
Meinst Du speziell diese 'Lisp-Prozessoren' oder dass es generell keine
Prozessoren gibt, die Hochsprachen verstehen? Ich meine, dass es mal
einen Mikrocontroller gab, der direkt Basic verstand. AFAIK musste man
da nichts mehr kompilieren. Und hatte Sun nicht Prozessoren gebaut, die
direkt Java verstehen? Oder musste man das auch noch übersetzen?

Martin
Henrik Motakef
2004-01-12 15:17:15 UTC
Permalink
Post by Martin Klaiber
Post by Henrik Motakef
Es gibt aber auch Prozessoren, die Hochsprachen verstehen können,
IIRC für Java und Basic. Kürzlich lief hier ein Thread zu Maschinen
(Symbolics), die Lisp verstehen.
Die verstehen auch nicht die Quelltexte, wie sie ein Mensch schreiben
würde. Kompilieren muss man trotzdem.
Meinst Du speziell diese 'Lisp-Prozessoren' oder dass es generell keine
Prozessoren gibt, die Hochsprachen verstehen? Ich meine, dass es mal
einen Mikrocontroller gab, der direkt Basic verstand. AFAIK musste man
da nichts mehr kompilieren. Und hatte Sun nicht Prozessoren gebaut, die
direkt Java verstehen? Oder musste man das auch noch übersetzen?
Ich kenne keine Microcontroller, die Basic verstehen, aber ich kenne
generell nicht allzuviele Microcrontroller :-)

LispM-Prozessoren hatten zwar ein paar Anweisungen, die bestimmte
lisp-typische Konstrukte effizienter zu implementieren machten und
teilweise auch direkt bestimmten Lisp-Funktionen entsprachen,
(bzw. waren generell so designt, z.B. die 36-Bit-Wörter mit 4 Tagbits)
aber sie haben trotzdem Binärcode ausgeführt. Es wäre IMHO auch
gewagt, z.B. den Lisp-Reader (Parser), der ja obendrein dynamisch
angepasst werden kann, direkt in Hardware implementieren zu wollen.

Zur Architektur der Lisp Machines sind übrigens
<http://www.unlambda.com/lispm/memo528.html> und
<http://smbx.org/html/modules.php?name=News&file=article&sid=4> ganz
interessant.

Die Java-Systeme habe ich bisher immer so verstanden, dass es sich um
spezielle JVMs handelt, die ggf. teilweise (oder auch ganz, k.A.) in
Hardware implementiert sind, also um Java-/Bytecode/-Prozessoren, die
mit kompilierten .class-Dateien arbeiten, nicht mit .java-Quelltexten.
Martin Klaiber
2004-01-16 10:16:46 UTC
Permalink
Post by Henrik Motakef
Ich kenne keine Microcontroller, die Basic verstehen, aber ich kenne
generell nicht allzuviele Microcrontroller :-)
Es gab IIRC mal einen von Motorola (HC...) ich konnte aber keine Info
mehr finden. Verbreitet ist/war die Basic-Stamp (Basic-Briefmarke),
dabei handelt es sich allerdings nur um einen PIC mit Basic-Interpreter
im ROM. Vermutlich enthielt der Motorola-Controller auch nur einen
Basic-Interpreter.

Martin
Marco Schmidt
2004-01-12 15:17:16 UTC
Permalink
Martin Klaiber:

[...]
Post by Martin Klaiber
Meinst Du speziell diese 'Lisp-Prozessoren' oder dass es generell keine
Prozessoren gibt, die Hochsprachen verstehen? Ich meine, dass es mal
einen Mikrocontroller gab, der direkt Basic verstand. AFAIK musste man
da nichts mehr kompilieren. Und hatte Sun nicht Prozessoren gebaut, die
direkt Java verstehen? Oder musste man das auch noch übersetzen?
Ja, mußte man. Das waren (bzw. sind) Prozessoren für Java-Bytecode,
wie er in den class-Dateien
<http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html>
steckt, die die meisten Java-Compiler erzeugen.

Gruß,
Marco
Juergen Ilse
2004-01-12 16:15:32 UTC
Permalink
Hallo,
Post by Martin Klaiber
Post by Henrik Motakef
Es gibt aber auch Prozessoren, die Hochsprachen verstehen können,
IIRC für Java und Basic. Kürzlich lief hier ein Thread zu Maschinen
(Symbolics), die Lisp verstehen.
Die verstehen auch nicht die Quelltexte, wie sie ein Mensch schreiben
würde. Kompilieren muss man trotzdem.
Meinst Du speziell diese 'Lisp-Prozessoren' oder dass es generell keine
Prozessoren gibt, die Hochsprachen verstehen?
Vermutlich beides.
Post by Martin Klaiber
Ich meine, dass es mal einen Mikrocontroller gab, der direkt Basic
verstand.
Ich bin mir ziemlich sicher, dass der Prozessor nicht Basic als Maschinen-
sprache hatte, folglich haette es immer noch einen Compiler oder Interpreter
gebraucht ...
Post by Martin Klaiber
AFAIK musste man da nichts mehr kompilieren.
Vermutlich nicht ,weil es wahrscheinlich eher ein Basic-Interpreter war,
mit dem man es zu tun hatte ... ;-)
Post by Martin Klaiber
Und hatte Sun nicht Prozessoren gebaut, die direkt Java verstehen?
Java-Bytecode, und das kann man wohl eher weniger als "Hochsprache"
bezeichnen. Ueblicherweise uebersetzt ein Java-Compiler Java-Quelltexte
nach Java-Bytecode ("Java-VM" als Zielsprache gibt es auch fuer andere
Sprachen, ich habe z.B. schon mal von einem entsprechenden Ada-Compiler
gehoert ...).
Post by Martin Klaiber
Oder musste man das auch noch übersetzen?
Ja, musste man. Am ehesten wird man (sofern man "Forth" als Hochsprache
ansieht) wohl mit den "Forth-Prozessoren" an die Forderung "Prozessor,
der eine Hochsprache versteht" herankommen, aber auch da wuerde ich der
Formulierung nur bedingt zustimmen ...

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
--
Das Netz ist Freude. Es ist Ekstase, die jeden einzelnen Nerv erglühen
läßt. Es ist Duft, den man fühlt. Es ist ein Bild, das man riecht.
Es ist Erfüllung - ein Geschmack, neben dem alles andere schal ist.
("Netzreiter-Preisung" aus dem Buch "Der Netzparasit" von Andreas Brandhorst)
Werner Jakobi
2004-01-13 23:37:32 UTC
Permalink
Post by Martin Klaiber
Ich meine, dass es mal
einen Mikrocontroller gab, der direkt Basic verstand.
Ein Prozessor versteht 0 und 1. Wenn im selben Gehäuse ein Eprom daneben
gelötet wird, mit dessen Befehlen er Basic oder sonstwas in 0 und 1
übersetzt, mag das zwar schnell gehen, ändert aber nichts an der
fundamentalen Tatsache.

Gruss, Werner
--
Morver, der Rollstuhl fuer kranke Windows-Newsreader und fuer OE.
Aktuelle Version 1.0.305: http://www.morver.de/
Claus Reibenstein
2004-01-14 07:09:44 UTC
Permalink
Post by Werner Jakobi
Post by Martin Klaiber
Ich meine, dass es mal
einen Mikrocontroller gab, der direkt Basic verstand.
Ein Prozessor versteht 0 und 1. Wenn im selben Gehäuse ein Eprom daneben
gelötet wird, mit dessen Befehlen er Basic oder sonstwas in 0 und 1
übersetzt, mag das zwar schnell gehen, ändert aber nichts an der
fundamentalen Tatsache.
Und was wolltest Du damit jetzt aussagen?

Ist Dir der Unterschied zwischen einem Prozessor und einem
Microcontroller klar?

Gruß. Claus
Robert K.
2004-01-18 00:20:28 UTC
Permalink
Ic weiß es nicht bestimmt, wwage aber sicher zu sagen, dass
es keinen Prozessor gibt, der eine Sprache (in Textnotation)
interpretiert. Es gibt auf jeden Fall Prozessoren die Bytecode verstehen
(Siehe deiner-> Ia32-Binär). Welche mit Java-bytecode gibt es auch (Sun)
. Allenfalls gibt es Prozessoren, die eine bytecode-Version von Basic,
Perl o.ä. umgehen können.
Wenn du da direkt Basic-code hineinstecken kannst steht software oder
eben Microcode (auch SW) dahinter.
Post by Henrik Motakef
Es gibt aber auch Prozessoren, die Hochsprachen verstehen können,
IIRC für Java und Basic. Kürzlich lief hier ein Thread zu Maschinen
(Symbolics), die Lisp verstehen.
Die verstehen auch nicht die Quelltexte, wie sie ein Mensch schreiben
würde. Kompilieren muss man trotzdem.
Ingo van Lil
2004-01-12 12:41:26 UTC
Permalink
Post by Florian Burger
Deshalb dachte ich an den Quellcode irgendeines Programms in einer
höheren Programmiersprache, das vom Menschen einigermaßen noch
verstanden werden kann, da ja mitunter verständliche Worte verwendet
werden ("if...then...else"; ich erinnere mich sogar an eine
VBA-Version, die ebenfalls regionalisiert, also eingedeutscht wurde
["wenn...dann...sonst"]). Dann dasselbe Programm eventuell als
Assembler, für Menschen schon schwieriger verständlich, umso leichter
aber für die Maschine. Und letztlich dasselbe Programm als reiner
Binärcode, für Menschen praktisch überhaupt nicht mehr verständlich,
für die Maschine aber genau das "Richtige". Alles aber ein und
dasselbe Programm.
Das Problem ist wohl, daß Assembler und Maschinensprache ganz stark vom
benutzten Betriebssystem abhängen. Am einfachsten dürfte es wohl noch
bei DOS sein, weil es dort COM-Dateien ohne aufwendige Symboltabelle
gibt. Wenn Dir ein einfaches "Hello World" langt:

DOS (.bat-Datei):

===
echo Hello World!
===

Pascal:

===
Program Hello;

begin
writeln ('Hello World!');
end.
===

Assembler (TASM):

===
.MODEL tiny

.DATA

hello db 'Hello World!$'

.CODE
.STARTUP

mov dx, offset hello
mov ah, 9
int 21h

.EXIT

END
===

Binär mit "Rückübersetzung":

===
00000000: BA 0C 01 mov dx,010C
00000003: B4 09 mov ah,09
00000005: CD 21 int 21
00000007: B4 4C mov ah,4C
00000009: CD 21 int 21
0000000B: 00 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 24 "\0Hello World!$"
===

Tschau,
Ingo
--
Hobbes: How come we play war and not peace?
Calvin: Too few role models. -- Bill Watterson, Calvin and Hobbes
Robert K.
2004-01-18 00:16:06 UTC
Permalink
Ein anderer Sprachvergleich ist auch noch hier:
http://99-bottles-of-beer.ls-la.net/r.html

Formal ist ein Programm - egal welche Sprache, ob binär, gepackt,
sonstwas - ein Modell. Und damit kann man Modelltransformation
(eineindeutig oder nur eindeutig) machen.
Insofern gibt es eben auch unendlich viele verschiedene Binärdarstelungen.

Vorschlag.

Nimm dir irgendwo einen Schnipsel eines Programms, übersetzte die
Bezeichner darin meinetwegen auf deutsch
und
Schnapp dir mit einem Hexeditor irgendwas binäres. Zeig deinen Leuten
einmal die Hex+ASCII-Darstellung und einmal das Pseudoprogramm
Loading...