Entwickler-Ecke
Sonstiges (Delphi) - Binärcode (als 0/1) mit Delphi und dann compilieren
Mrs. Sheep - Di 31.03.09 21:14
Titel: Binärcode (als 0/1) mit Delphi und dann compilieren
Der französische Mathematiker Émile Borel setzte das Bild in diese Welt, in dem 1000 Affen zufällig auf einer Schreibmaschine herumtippen, und ob dabei Hamlets Monolog herrauskommen kann. (unwarscheinlich)
Die Theorie wurde dann auf die Quantenmechanik übertragen, und zwar das bei den Billiarden von Bits (in den Quanten) wesentlich einfacher BRAUCHBARE Programme rauskämen als bei den Affen. Da Quanten ja untereinander wechselwirken, sogar Operationen ausführen können, könnte man das ganze jetzt auf Maschinencode übertragen. Kommt bei der zufälligen Eingabe etwas brauchbares raus? - Theorie ist schön, aber an der Praxis scheitere ich mangels zu geringer Kenntnisse...
i) Wie erzeugt und kompiliert man Maschinencode?
ii) Kann der zufällige Code meinem PC schaden zufügen?
iii) Was passiert mit "Bugs" im Maschinencode?
Vielen Dank, fürs Lesen und Mitdenken, und am besten noch Antworten geben können
PS: Die Theorie hab ich reingepackt um die ganzen Posts mit dem "wozu/warum" zu ersparen .. xD
Mrs. Sheep - Di 31.03.09 21:24
Danke, das ging ja auch in meine Richtung. Hat jemand vill noch die PROGRAMMIERTECHNISCHEN Hinweise die ich brauch? - Als Belohnung berichte ich die Ergebnisse wenn was interssantes rauskommt xD
Außerdem würde ich noch weiter vorher anfangen: können sich Programme selst reproduzieren, d.h. überleben?
platzwart - Di 31.03.09 22:22
Mrs. Sheep hat folgendes geschrieben : |
ii) Kann der zufällige Code meinem PC schaden zufügen?
|
Natürlich!!! Das Ergebnis wäre ja ein zufälliges Programm. Sollte das zufällige Programm zufällig lauffähig sein und sollte es sich dabei zufällig um ein Programm handeln, dass nicht zufällig deine Festplatte löscht... ;)
Kha - Di 31.03.09 22:33
Mrs. Sheep hat folgendes geschrieben : |
i) Wie erzeugt und kompiliert man Maschinencode? |
Wenn es dir nur darum geht, zufällige Bits in eine Datei zu schreiben, brauchst du ja keinen Compiler. Aber schon die Wahrscheinlichkeit, einen ausführbaren Exe-Header zu produzieren, dürfte nicht sehr hoch sein ;) .
Mrs. Sheep hat folgendes geschrieben : |
Außerdem würde ich noch weiter vorher anfangen: können sich Programme selst reproduzieren, d.h. überleben? |
Den Hinweis auf Viren hat ja
F34r0fTh3D4rk schon gebracht, aber um noch etwas Theorie in diese praxisferne Diskussion zu bringen ;) :
http://en.wikipedia.org/wiki/Quine_(computing)
Mrs. Sheep - Mi 01.04.09 16:47
Kha hat folgendes geschrieben : |
Aber schon die Wahrscheinlichkeit, einen ausführbaren Exe-Header zu produzieren, dürfte nicht sehr hoch sein ;) |
EXE-Header ? Erbitte weiter Erläuterung .. xD und selbst wenn es mir (wie ja offensichtlich ist) WIRKLICH darum geht, nur "sinnlos" 0 und 1 zu schreiben und auszuführen: WIE führe ich die dann aus?
Und wegen dem "reproduzieren": Nicht ob es möglich ist, sondern ob die Programme darauf kommen. Den (um zur Theorie mit der Evolution zurückzukommen) nur Tiere die sich fortpflanzen überleben!
Kann man indem man sich als eingeschränkter Benutzer ausgibt, sich schützen? - Sonst geh ich für den Versuch in die Schule.
JayEff - Mi 01.04.09 17:25
Mrs. Sheep hat folgendes geschrieben : |
Kann man indem man sich als eingeschränkter Benutzer ausgibt, sich schützen? - Sonst geh ich für den Versuch in die Schule. |
:lol: Das hab ich auch mal so gemacht, als ich mir nicht sicher war, ob man sich mit
SendMessage(HWND_BROADCAST, WM_CLOSE, 0, 0); was kaputt macht :rofl:
Du kannst auch als eingeschränkter Benutzer Dateien löschen, nur eben nicht mehr so viele :) Du musst selber wissen, ob alle wichtigen Dateien in ordnern sind, auf die du als eingeschränkter Nutzer keinen Zugriff hast :)
Ein Exe-Header ist die "Kopfzeile" in der Exe-Datei, die dem Betriebssystem sagt, "hier, das ist ausführbarer Code" und weitere Informationen enthält.
EXE-HEADER
Narses - Mi 01.04.09 17:28
Moin!
Mrs. Sheep hat folgendes geschrieben : |
Kann man indem man sich als eingeschränkter Benutzer ausgibt, sich schützen? - Sonst geh ich für den Versuch in die Schule. |
Nimm halt eine VM, mach einen SnapShot (für den Notfall) und starte deine Test-Anwendung. :nixweiss:
cu
Narses
Mrs. Sheep - Mi 01.04.09 17:39
also (iii) kann ich selbst beantworten: Habe einfach per Editor 0/1 in eine Datei getippt, als EXE gespeichert, ausgeführt:
Eine Console öffnet sich, schließt sich, nichts.
Aller Wahrscheinlich nach war da ein Bug =)
Und (i) hat sich ja wohl auch geklärt. Bedeutet dieser Versuch das also auch das man ohne einen gezielten Header zu schreiben ein Ergebnis bekommen kann??
Wie kann ich dann überhaupt (wenn ich jetz mal angenommenerweise 5k Programme starte), überprüfen ob etwas passiert?
JayEff - Mi 01.04.09 17:58
Mrs. Sheep hat folgendes geschrieben : |
also (iii) kann ich selbst beantworten: Habe einfach per Editor 0/1 in eine Datei getippt, als EXE gespeichert, ausgeführt |
Editor, du meinst Notepad? :rofl: Und jetzt glaubst du, du hättest binärcode getippt? Ich will dir mal sagen was deine Datei an Binärcode enthielt: 00110000 und 00110001 immer und immer wieder in folge (das ist die Binärdarstellung der Zeichen 1 und 0 ) :) Das ist keine gültige win32-Anwendung.
Ich kann dir nicht sagen, warum das OS mit einer Konsole darauf reagiert, aber wenn du meinen Link angeklickt hättest (den google-such link.
http://www.delorie.com/djgpp/doc/exe/ ) wüsstest du, dass das, was da war, keine Exe-Datei war und vom Betriebssystem nicht als solche ausgeführt wurde. Die exe-Datei muss bin einer Folge bestimmter Zeichen (aka Hex-Werte, nicht das, was du per Editor eingeben kannst! ) beginnen, sonst ist es keine.
Mrs. Sheep - Mi 01.04.09 18:10
... ok. also doch kein binärcode. :oops: aber WIE stell ich ihn denn dann bitte her ?!!
Und ich HATTE auf den Link geklickt, jedoch nichts annähernd verständliches gefunden.
Ganz ehrlich gesagt hab ich auch diesen nicht ganz verstanden; Muss man also an die entsprechenenden Stellen die entsprechenden "Paramater" schreiben? - Wenn ja, hätte da mal jemand das was ich da an Code bräuchte?
- Ich will das ganz zwar NICHT als Scriptkiddie lösen, aber ich kann mich auch nicht in ALLES einlesen.
Mir ging es eigentlich mehr um den wissenschaftlichen Aspekt und brauchte den entsprechenden Code nur als Mittel zum Weg.
Timosch - Mi 01.04.09 18:39
Wenn du Nullen und Einsen in einen Texteditor tippst, dann werden diese Zeichen als ASCII-/ANSI-/Unicode-Zeichen gespeichert. (Das gehört eigentlich zum Grundwissen des Programmierens...) Aus der Null wird zum Beispiel 30h. Um direkt Zahlen abzuspeichern hol dir halt nen Hex-Editor.
elundril - Mi 01.04.09 18:44
oder schreib einfach irgendwelche ASCII-/ANSI-/Unicode-Zeichen sollt ja aufs gleiche hinauskommen. Einfache Methode, hau den Kopf n paar mal feste gegen das Keyboard.
lg elundril
F34r0fTh3D4rk - Mi 01.04.09 19:18
Direkt Bits in eine Datei zu schreiben ist nicht möglich, da diese immer zu je einem Byte gebündelt gespeichert werden.
Angenommen, du möchtest die Binärkette: 1110 0100 in eine Datei schreiben, so kannst du das mit dem Notepad tun, indem du ein ä tippst und diese Datei speicherst. Das "ä" entspricht nämlich in Binärdarstellung genau diesem Code.
Jetzt könntest du ein Programm schreiben, welches den Exe-Header erzeugt (den willst du ja sowieso) und dann beliebige Zeichen anhängt. Dieses solltest du dann wie oben schon genannt sicherheitshalber auf einer VM ausführen (auch wenn ich bezweifle, dass da so schnell was "brauchbares" herauskommt).
Vielleicht solltest du es zunächst mit sowas versuchen:
http://www.delphi-forum.de/viewtopic.php?t=72354
mfg
JayEff - Mi 01.04.09 19:22
elundril hat folgendes geschrieben : |
Einfache Methode, hau den Kopf n paar mal feste gegen das Keyboard. |
Dann hast du aber immernoch keinen Exe-Header :mrgreen: Und echten Zufall hast du dann auch nicht! :mahn:
Was den Header betrifft: nun, schreib dir einen Exe-Header, wie er auf der verlinkten Seite steht:
Per Hex-Editor 0x4d, 0x5a in die ersten 2 Byte, weiter gehts mit "The number of bytes in the last block of the program that are actually used. If this value is zero, that means the entire last block is used (i.e. the effective value is 512).", also nimmst du FF FF oder 00 00 (hat ja den gleichen Effekt) und so weiter bis du die Bytes 1A-1B abgehandelt hast. Entsprechende Werte musst du halt mit Zufallszahlen füllen oder sagen "Ich benutz alles!" und dann den Block um den's sich handelt mit Zufallswerten füllen.
jaenicke - Mi 01.04.09 19:29
Mrs. Sheep hat folgendes geschrieben : |
... ok. also doch kein binärcode. :oops: aber WIE stell ich ihn denn dann bitte her ?!! |
Was der Unterschied zwischen den verschiedenen Darstellungen (dezimal, binär, hexadezimal, ...) ist, sollte als Programmierer eigentlich klar sein, schau mal hier:
http://de.wikipedia.org/wiki/Dualsystem
Delete - Mi 01.04.09 19:44
Timosch hat folgendes geschrieben : |
Wenn du Nullen und Einsen in einen Texteditor tippst, dann werden diese Zeichen als ASCII-/ANSI-/Unicode-Zeichen gespeichert. (Das gehört eigentlich zum Grundwissen des Programmierens...) Aus der Null wird zum Beispiel 30h. Um direkt Zahlen abzuspeichern hol dir halt nen Hex-Editor. |
Du wiedersprichst dir gerade selber. Was ist denn 30h? Das ist doch alles nur ein und der gleiche Wert, nur in anderen Zahlensystem dargestellt. Guck dir mal eine Textdatei im HexEditor an und stell die Anzeige auf binär. Da wirst du nur nullen und einsen sehen. Es ist alles eine eine Interpretationssache. Ein Texteditor wird die nulen und einsen als Text interpretieren und die nullen und einsen als Zeichen darstellen, ein Grafikprogramm wird die nullen und eines als Bitmap interpretieren und die nullen und einsen als Pixel des Bitmaps darstellen. Dies gilt natürlich nur, so lange die nullen und einsen zu dem Dateiformat passen.
Also er hat schon nullen und einsen geschrieben wir er wollte. Nur wahrscheinlich nicht die, die er wollte. ;)
Timosch - Mi 01.04.09 20:33
Luckie hat folgendes geschrieben : |
Timosch hat folgendes geschrieben : | Wenn du Nullen und Einsen in einen Texteditor tippst, dann werden diese Zeichen als ASCII-/ANSI-/Unicode-Zeichen gespeichert. (Das gehört eigentlich zum Grundwissen des Programmierens...) Aus der Null wird zum Beispiel 30h. Um direkt Zahlen abzuspeichern hol dir halt nen Hex-Editor. |
Du wiedersprichst dir gerade selber. Was ist denn 30h? Das ist doch alles nur ein und der gleiche Wert, nur in anderen Zahlensystem dargestellt. Guck dir mal eine Textdatei im HexEditor an und stell die Anzeige auf binär. Da wirst du nur nullen und einsen sehen. Es ist alles eine eine Interpretationssache. Ein Texteditor wird die nulen und einsen als Text interpretieren und die nullen und einsen als Zeichen darstellen, ein Grafikprogramm wird die nullen und eines als Bitmap interpretieren und die nullen und einsen als Pixel des Bitmaps darstellen. Dies gilt natürlich nur, so lange die nullen und einsen zu dem Dateiformat passen.
Also er hat schon nullen und einsen geschrieben wir er wollte. Nur wahrscheinlich nicht die, die er wollte. ;) |
Du verstehst mich falsch (woran ich aber teilweise auch schuld bin, dank ungenauer Ausdrucksweise). Ich wollte damit aussagen, dass das Zeichen "0" nicht als Zahl 0 gespeichert wird (sondern eben als 30h bzw. 48 dez), weil es sich um ein Zeichen, nicht um eine Zahl handelt, wenn es mit einem Texteditor eingegeben wurde. Also prinzipiell der Grund, warum Strings zum Rechnen in Float/Int ungewandelt werden müssen.
Wenn ich mit Notepad den Text "48" schreibe und abspeichere, dann steht in dieser Datei eben nicht die Zahl 48, sondern die Nummer des ASCII-Codes für 4 und die für 8, d.h. 52 56.
Natürlich sind das letzten Endes auch Nullen und Einsen. Aber ich kann eben nicht in einem Texteditor "10010" schreiben und dann glauben, dass auch die Bits 1,0,0,1,0 gespeichert werden.
Delete - Mi 01.04.09 22:20
So wird es verständlich. ;) Ich sagte ja aucch, er hätte nullen und einsen geschrieben, nur die, die er wollte. ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!