Delphi-PRAXiS

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)

Illuminator-23-5 12. Nov 2003 15:55


programm, das eigenen Quellcode ausgibt?
 
kann mir jemand dabei helfen:
ich brauch ein programm, das den eigenen (gesamten) quellcode ausgibt
das ganze soll eine Konsolenanwendung und so kurz wie möglich sein!

Touchdown 12. Nov 2003 16:04

Re: programm, das eigenen Quellcode ausgibt?
 
:lol: Wenn du jemandem findest der aus Maschinencode Object-Pascal Code erstellen kann, würde ich diesen Menschen gerne mal kennenlernen. Falls es eine Frau ist würde ich sie sofort heiraten :mrgreen:

Wormid 12. Nov 2003 16:04

Re: programm, das eigenen Quellcode ausgibt?
 
Da das decompilieren zu echtem Delphi-Quelltext ja nicht geht (soweit ich weiß), bleibt dir wohl nix anderes übrig, als den Source als Resource, Ressourcestring(s), Constante oder ähnlich in die Anwendung einzukompilieren, zur Laufzeit zu laden und dann auszugeben.

Der Weg über die Resourcen dürfte sich dabei als am bequemsten erweisen, denke ich.

Gruß

Wormid

Illuminator-23-5 12. Nov 2003 16:25

Re: programm, das eigenen Quellcode ausgibt?
 
ich muss nicht den quellcode einer Exe- oder dcu-datei ausgeben, sondern ein prog schreiben, das den EIGENEN Code ausgibt!
das mit den resourcen geht deshalb nicht, weil das ganze dann auch auf pascal und c umbaubar sein soll!

Chewie 12. Nov 2003 16:33

Re: programm, das eigenen Quellcode ausgibt?
 
Zitat:

Zitat von Illuminator-23-5
ich muss nicht den quellcode einer Exe- oder dcu-datei ausgeben, sondern ein prog schreiben, das den EIGENEN Code ausgibt!

Und was denkst du was der eigene Code ist :roll: ??

Illuminator-23-5 12. Nov 2003 16:39

Re: programm, das eigenen Quellcode ausgibt?
 
ok, ein beispiel:

das programm sieht ca. so aus:

program irgendwas;
uses
sysUtils;
begin
//tu etwas
end.

die Ausgabe soll dann sein:
program irgendwas;
uses
sysUtils;
begin
//tu etwas
end.

sprich das Programm soll den Quellcode aus dem es besteht, ausgegeben werden. Unter quellcode ist hier der gemeint, der in delphi oder pascal o.ä. eingetippt wird!

Chewie 12. Nov 2003 16:50

Re: programm, das eigenen Quellcode ausgibt?
 
Wie schon bemerkt wurde, du müsstest in diesem Fall dein Code in der Datei als Resource, also Konstante oder sonstwie speichern. Vom kompilierten Programm kannst du nicht mehr zurück auf den Quellcode schließen.

Illuminator-23-5 12. Nov 2003 16:59

Re: programm, das eigenen Quellcode ausgibt?
 
das Problem ist, dass das auch in Pascal und C realisiert werden soll. Und da kann man nicht (soweit ich weiß jedenfalls) keine resourcen einbinden - deshalb geht das nicht!

Sergej 12. Nov 2003 17:17

Re: programm, das eigenen Quellcode ausgibt?
 
...dann speichers doch in ner externen (Text)Datei :gruebel:

Chewie 12. Nov 2003 17:19

Re: programm, das eigenen Quellcode ausgibt?
 
Zitat:

Zitat von Illuminator-23-5
Und da kann man nicht (soweit ich weiß jedenfalls) keine resourcen einbinden - deshalb geht das nicht!

Wieso sollte man nicht? Ressourcen werden durch das verwendete Dateiformat ermöglicht, nicht durch die Programmiersprache. Gut, der Compiler ist so nett und schreibt die Resourcen schon in die Datei während dem Compilieren, aber es ging auch ohne das. Natürlich kann ein C-Compiler auch Resource in eine PE-Datei schreiben.

Da hättest du evtl. sogar den Vorteil, dass du dies mit einem Präprozessor-Malro automatisieren könntest.

Matze 12. Nov 2003 17:25

Re: programm, das eigenen Quellcode ausgibt?
 
Ich verstehe das hier nicht ganz, aber kann man nicht einfach die .pas als ressource speichern?

Chewie 12. Nov 2003 17:26

Re: programm, das eigenen Quellcode ausgibt?
 
Doch, klar kannst du das.

Illuminator-23-5 12. Nov 2003 17:32

Re: programm, das eigenen Quellcode ausgibt?
 
ich bin mir nicht sicher (muss mir die aufgabenstellung nochmal genau durchlesen), ob externe dateien dabei sein dürfen! ich denke jedoch nicht, den sonst wärs ja zu einfach für unseren info-lehrer;)

Luckie 12. Nov 2003 17:37

Re: programm, das eigenen Quellcode ausgibt?
 
Wie stellt sich das euer Info-Lehrer vor? Wie sollst du aus dem kompilierten Quellcode wieder den Quelltext bekommen? Das ist unmöglich!!!

Illuminator-23-5 12. Nov 2003 17:43

Re: programm, das eigenen Quellcode ausgibt?
 
Ich hab mir gedacht, dass das durch rekursion irgendwie machen zu können, vielleicht is das aber auch die falsche richtung!
ps: ich bezweifle (auch?), dass das mein informatiklehrer schafft!

MrKnogge 12. Nov 2003 17:46

Re: programm, das eigenen Quellcode ausgibt?
 
Wenn ers schafft bekommt er den ehren DrTitel für Informatik :mrgreen:

Illuminator-23-5 12. Nov 2003 17:48

Re: programm, das eigenen Quellcode ausgibt?
 
falls jemand BrainFuck kennt, da hab ichs schon geschafft:
Code:
.
aber sonst bin ich ahnungslos...

Brüggendiek 12. Nov 2003 22:28

Re: programm, das eigenen Quellcode ausgibt?
 
Hallo!

Die Frage ist, was das Programm ausgeben soll:

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!

2. Bei jeder Anweisung die entsprechede Source-Zeile ausgeben, also einen Ablauf-Verfolger (Trace). Das geht grundsätzlich nicht. Allenfalls könnte man das Programm erstellen und dann zusätzlich bei jede Zeile den auszuführenden Code mit Writeln ausgeben. Dazu muß aber das Programm gegenüber dem ausgegebenen "Quelltext" verändert werden.
Delphi-Quellcode:
program test;

var v:Byte;

procdure up (var a:Byte);
begin
  writeln ('procedure up (var a:Byte);');
  writeln ('begin')

  writeln ('inc (a);');
  inc (a);

  writeln ('end;');
end;

begin
  writeln ('program test;');
  writeln ('var v:Byte;');
  writeln ('begin');

  writeln ('v := 5;');
  v := 5;

  writeln ('up (v)');
  up (v);

  Writeln ('end.')
end.

Vermutlich hat der Lehrer Variante 1 gemeint!

Gruß

Dietmar Brüggendiek

Christian Seehase 12. Nov 2003 23:20

Re: programm, das eigenen Quellcode ausgibt?
 
Moin Illuminator,

Zitat:

Zitat von Illuminator-23-5
ich bin mir nicht sicher ... , ob externe dateien dabei sein dürfen!

und ich wäre mir nicht sicher, ob man eine Resource als externe Datei ansehen muss ;-)

Robert Marquardt 13. Nov 2003 05:53

Re: programm, das eigenen Quellcode ausgibt?
 
Schau dich mal bei http://www.ioccc.org um.
Dein Programm ist theoretisch durchaus machbar, aber durch den selbstreferentiellen Bezug ist das etwas fuer Gurus.

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:

morgentau 29. Nov 2003 22:43

Re: programm, das eigenen Quellcode ausgibt?
 
Hi Illuminator,

die Lösung und einige Gedanken zu dieser beliebten Schulaufgabe solltest du unter:
http://www.enterag.ch/hartwig/writeme/writeme.html finden.

Niels 30. Nov 2003 01:23

Re: programm, das eigenen Quellcode ausgibt?
 
Zitat:

Zitat von Stanlay Hanks
Rekursion? Was hat denn das damit zu tun?

Das wurde doch bereits mehrmals erwähnt. Angenommen du legst den Quellcode in 'ne Konstante...dann müsste die Konstante (da sie ja zum Quellcode gehört) ebenfalls darin enthalten sein. Und in dieser enthaltenen ist natürlich wieder der ganze Quellcode. Somit kann man schon von Rekursion sprechen. :wiejetzt:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

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