Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   programm, das eigenen Quellcode ausgibt? (https://www.delphipraxis.net/11725-programm-das-eigenen-quellcode-ausgibt.html)

woki 13. Nov 2003 08:56

Re: programm, das eigenen Quellcode ausgibt?
 
Und du bist sicher, dass Du nicht einfach die Aufgabenstellung falsch verstanden hast.
Folgende Einwände:
1. ES ist unmöglich. Denn definitv sind zumindest viele Bezeichner einfach durch Adressen ersetzt, die sind weg nach dem Compilieren einfach nicht mehr da.
2. Eine einfache exe weiß von dem Quellcode nichts mehr, um das revers zu matchen, müßte ... klar wie es jetzt weitergeht, nicht?

Güsse
Woki

Robert Marquardt 13. Nov 2003 10:06

Re: programm, das eigenen Quellcode ausgibt?
 
Es geht doch garnicht darum die Source aus dem EXE herauszuziehen.
Ein EXE soll eine Ausgabe machen, die genau ihrer eigenen Source entspricht.

choose 13. Nov 2003 10:13

Re: programm, das eigenen Quellcode ausgibt?
 
Zitat:

Zitat von Robert Marquardt
Ein EXE soll eine Ausgabe machen, die genau ihrer eigenen Source entspricht.

Schön, dass Du es noch einmal so klar herausgestellt hast, Robert. Mithilfe dieser Aussage behaupte ich, dass es ohne eine "externe Quelle", also ohne writeln vor der jeweiligen Zeile oä, unmöglich ist, weil dies zu einem rekursiven Paradoxon führen würde:
Angenommen der Code lautet
Delphi-Quellcode:
i:= 42;
und an einer beliebigen Stelle des Codes würde nun eine entsprechende Zeile
Delphi-Quellcode:
Ausgabe('i:= 42');
stehen, gehört eben diese Zeile strenggenommen ebenfalls zum Code und müsste ebenfalls ausgegeben werden...

Folglich muss der Code dem EXE in "externer Form", zB gelinkt als Ressource, mit Verweis auf das Source-File, öä zur Verfügung stehen, damit hier lediglich etwas in der Form
Delphi-Quellcode:
Ausgabe(SourceAusExternerQuelle);
steht.

Es hoffe, es wurde klar, was ich meine... :gruebel:

Robert Marquardt 13. Nov 2003 13:19

Re: programm, das eigenen Quellcode ausgibt?
 
Zumindest bei C sollte der Präprozessor das Paradoxon aufbrechen koennen.
Ich kann mich schwach erinnern das bei den IOCCC-Programmen was dabei war.
http://www.ioccc.org

rebugger 13. Nov 2003 13:41

Re: programm, das eigenen Quellcode ausgibt?
 
Also mal erstens:
Die anderen haben die ganze Zeit dein Problem verstanden und versucht dir klar zu machen, dass man aus ner .exe-Datei nicht den Delphi-Quellcode machen kann !!!

Sowas ist 100% unmöglich.

Deine Lösung:
Nachdem du mit dem Programm fertig bist, kopierst du den Quelltext und speicherst ihn in ne Variable/Konstante/..., die du dann im Programm an jeder Stelle ausgeben kannst.

choose 13. Nov 2003 13:42

Re: programm, das eigenen Quellcode ausgibt?
 
Es ist lange her, dass ich mit C gearbeitet habe, aber allgemein sollte soetwas nach meinem Empfinden nur dann funktionieren, wenn
  1. der Preprozessorer selbst nicht oder nur endlich rekursiv parst oder
  2. mit in C üblichen Anweisungen an den PP (#define, #ifndef, #endif) gearbeitet wird, um das zu verhinden

In Delphi bekomme ich bei diesem Konstrukt
Delphi-Quellcode:
unit MyUnit;
interface
implementation
  {$i MyUnit.pas}
end.
einen "Fatalen-Fehler"
Zitat:

Zitat von Delphi-Compiler: 260. Rekursive Include-Datei <Name>
Die Direktive $I wurde zur rekursiven Einbindung einer anderen Datei verwendet. Sie müssen sicherstellen, daß alle eingebundenen Dateien keine Rekursionen enthalten.


Illuminator-23-5 13. Nov 2003 15:17

Re: programm, das eigenen Quellcode ausgibt?
 
nun, das problem ist folgendes:

wenn ich den quellcode in eine Konstante speichere, muss ich die definion der Konstante auch ausgeben! das wär dann sozusagen eine unendliche rekursion!

z.B:
Delphi-Quellcode:
program main; const ausgabe = 'program main; const ausgabe = '...'; begin writeln(ausgabe); end.'; begin writeln(ausgabe); end.
beim ... muss eben der inhalt von ausgabe sein!

choose 13. Nov 2003 15:26

Re: programm, das eigenen Quellcode ausgibt?
 
Hallo Illuminator-23-5,
das ist ziemlich genau das, was ich mit meinem Posting von heute, 11:13 meinte.

Bitte kläre doch noch einmal die Problemstellung mit Deinem "info-lehrer", falls es dann noch ein "wirkliches" Problem geben sollte, können wir es ggf lösen.

MathiasSimmack 13. Nov 2003 17:43

Re: programm, das eigenen Quellcode ausgibt?
 
Ich tippe mal auf diese Idee:
Zitat:

Zitat von Brüggendiek
1. Den eingegebenen Quellcode - dann ist das ganz einfach. Bei einer Konsolenanwendung muß man mit Readln die Quelldatei zeilenweise einlesen und mit Writeln auf dem Bildschirm ausgeben. Ein Windows-Programm könnte das Ganze sogar mit men Memo erledigen - das wäre dann ein 2-Zeiler!

Das hört sich nach einer typischen Schulaufgabe zum Thema "Dateien öffnen, zeilenweise einlesen und anzeigen" an. Alles andere wäre, wenn ich mal so ein Fazit ziehen darf, wohl nicht machbar. Ich denke also, das Programm (*.dpr) soll sich selbst öffnen, usw. (wie Dietmar schon schrieb). Die kompilierte EXE greift damit auf den (hoffentlich) beiliegenden Quellcode zu - und schon ist die Aufgabe gelöst. :)

Stanlay Hanks 13. Nov 2003 17:56

Re: programm, das eigenen Quellcode ausgibt?
 
Rekursion? Was hat denn das damit zu tun? Ich meine, du müsstest das Programm ja so dekompilieren, dass du alles wiederbekommst. Und das ist schlicht weg nicht möglich, wie hier schon mehrmals gesagt wurde. Ich bezweifle auch, dass euer Info Lehrer solchen Schwachsinn von euch verlangt. Vielleicht hat er einfach gemeint, ihr sollt den Source bevor ihr das Prog kompiliert, einfach irgendwie speichern und dann das Programm so gestalten, dass er aufgerufen wird. (txt, resource, wie schon öfters erwähnt) Da gibts Probleme mit Variablennamen usw und sofort. Das einzige, was mit Dekompilieren glaub ich möglich ist, ist, die Prozedurköpfe zu bekommen, aber nicht mal da bin ich mir sicher...

Man liest sich, Stanlay :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz