Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Ist REFLEXIVES PROGRAMMIEREN MIT QB4.5 D möglich?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 11.04.2006, 16:24    Titel: Ist REFLEXIVES PROGRAMMIEREN MIT QB4.5 D möglich? Antworten mit Zitat

Ich meine Damit, ob ich ein Programm in QB erstellen kann, das in sich selbst weiteren Programmcode einbaut.
Nicht damit gemeint ist z.B. das Speichern von Variablen oder so in anderen Dateien auf die dann irgendwie zugegriffen wird!

Nils happy
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 11.04.2006, 16:25    Titel: Antworten mit Zitat

Du kannst eine andere .BAS erstellen und dann mit CHAIN aufrufen, aber nur im Interpretermodus zwinkern

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.04.2006, 16:44    Titel: Antworten mit Zitat

Du kannst dir auch eine eigene Scriptsprache basteln und die zur Laufzeit interpretieren lassen. lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 11.04.2006, 17:04    Titel: Antworten mit Zitat

Meinst du, dass sich das Programm selbst zur Laufzeit ändert? In Assembler ist es (zwar nicht gerade einfach, aber es geht - gab's auch mal 'nen Tutorial dazu) möglich. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.04.2006, 18:19    Titel: Antworten mit Zitat

Selbst Modifiziernte Code grinsen.
Einige C C++ Asemebler Programmierer setzen das ein um Rechenzeit zu sparen, solche Verfahren Grenzen aber an Lebensmüde.

In QBasic ist es, wenn auch mit etwas Vorsicht, möglich mit diesen Befehlen das zu basteln:
Open "*****" Das Programm öffnet den eignen Code

Input
Print
Das Programm modifiziert den Code und kopiert ihn.

Die übergabe klappt dann über Run oder Chain.

Aber eben nur beim Interpretieren, mit Exe Dateien geht es nicht.
In QBasic kann nicht viel schief gehen, ausser Natürlich der erzeugte Code ist fehlerhaft.

Sag mal die Anwendung, dann geht konkretter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 11.04.2006, 20:42    Titel: Antworten mit Zitat

Zitat:
Du kannst eine andere .BAS erstellen und dann mit CHAIN aufrufen, aber nur im Interpretermodus


Das ist nicht richtig. Ich habe es ausprobiert: Auch compilierte EXE-Dateien kann man problemlos chainen. Sie können sogar Daten miteinander austauschen, wenn diese in allen CHAIN-Moduldateien in gleicher Reihenfolge mit COMMON deklariert werden. Beim CHAIN-Befehl muss man als Namen des gechainten Programms natürlich die Dateierweiterung "EXE" statt "BAS" anhängen.

In die neuen Version der QB-MonsterFAQ, die noch diesen Monat erscheinen wird, habe ich ein Beispiel eingefügt, welches das Chainen von EXEs demonstriert.
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 12.04.2006, 07:59    Titel: Antworten mit Zitat

@Thomas Antoni
Das "nur im Interpretermodus" war auf die selbst Modifikation bezogen.
Eine Exe Datei kann mit einer Exe Datei verbunden werden, aber eine Exe Datei nicht mit einer Bas.
Man könnte nun die Bas Datei compilieren vor dem chainen, aber dadurch wird des Verfahren wesentlich komplexer.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 12.04.2006, 10:07    Titel: Antworten mit Zitat

@Thomas: Das war - wie Michael schon sagte - auf das Generieren von Quellcode zur Laufzeit bezogen.
Wenn eine EXE iregendeinen Quellcode erstellt, und ihn dann während der Laufzeit mit
Code:
CHAIN "wasweisich.bas"

aufruft, dann wird der Quellcode ja nicht mehr mitkompiliert, was das Problem an der ganzen Geschichte ist...

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 12.04.2006, 14:00    Titel: Antworten mit Zitat

Interessante Antworten von Euch allen!

Beispiel:

Ich gebe ein QB.exe-Programm ab. Dieses ruft der Nutzer auf und passt es seinen Bedürfnissen durch Auswahlfragen an. Beim nächsten Aufruf der *.exe soll nicht mehr angepaßt werden ,sondern die *.exe nur noch mit dieser angepaßten Änderung laufen. Eigentümernameseingabe oder so was. Und zwar ohne, daß eine Parameterdatei oder so aufgerufen werden muß.

Anders gefragt kann eine QB.exe Quellcode erstellen, kompillieren, in sich aufnehmen, und als dieselbe *.exe erscheinen(abgesehen von Größenänderung)?


Nils lächeln
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.04.2006, 14:22    Titel: Antworten mit Zitat

Habe dazu einmal früher einmal einen Artikel im Usenet veröffentlicht:

http://groups.google.com/group/comp.lang.basic.misc/msg/caf5586a7e28da5c

Ansonsten jedoch sollte man self-modifizierenden Code eher als etwas Verpöntes betrachten! Jeder soll sich hier bewusst sein, dass jeder z.B. in einer bösartigen Webseite eingebaute Exploit, der aktiv eine Browser-Sicherheitslücke vom Typ Pufferüberlauf nutzt, letztendlich gar nichts anderes als selbstmodifizierender Code ist, dasselbe natürlich auch, wenn ich an einen verletzbaren HTTP-Daemon (Webserver), SMTP-Server usw. eine überlange Eingabe ("z.B. "RCPT TO: xxx@yyy....(meineitwegen mehrere Millionen Zeichen, so dass der Befehlspuffer beim schlecht programmierten Server überläuft)...yyy.de") sende.

Microsoft hat die Problematik inzwischen erkannt und baut daher den Betriebssystemkernel speziell ab Vista so aus, dass das sog. Textsegment (=geladener Maschinencode aus der .EXE) nur read-only bereitsteht, während im Datensegment (=Variablenspeicher) Änderungen möglich sind, aber nichts ausgeführt werden kann). Sog. Stack execute protection wurde daher bereits mit XP Service Pack 2 eingeführt.

Aus genau diesem Grund sollte man Software-Design-Ansätze, die Selbstmodifikation erfordern, in Zukunft tunlichst vermeiden und unterlassen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net


Zuletzt bearbeitet von dreael am 12.04.2006, 14:24, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 12.04.2006, 14:23    Titel: Antworten mit Zitat

Hi!

Entweder du benutzt eine externe Datei um die Daten zu speichern (zum Beispiel ein nutzerspezifischer Programmname o.ä.) oder du hängst die Daten an die EXE hinten 'ran.

Wegen dem komletten Programm verändern: du könntest in die EXE "nur" einen Scriptspracheninterpreter einbauen, was auch wieder zwei Möglichkeiten brächte:
entweder a) Daten an die EXE hängen, oder b) eine externe Datei. lächeln

(Ich ging in meinem ersten Posting davon aus, dass du das Programm zur Laufzeit temporär im Speicher ändern willst) grinsen

Grüße,
Mao
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 12.04.2006, 14:44    Titel: Antworten mit Zitat

Zitat:
Ich gebe ein QB.exe-Programm ab. Dieses ruft der Nutzer auf und passt es seinen Bedürfnissen durch Auswahlfragen an. Beim nächsten Aufruf der *.exe soll nicht mehr angepaßt werden ,sondern die *.exe nur noch mit dieser angepaßten Änderung laufen. Eigentümernameseingabe oder so was. Und zwar ohne, daß eine Parameterdatei oder so aufgerufen werden muß.

Dann muss sich der Code aber nicht selbst verändern!?
Das Programm zum ändern könnte eigenständig sein und am Code des Eigentlichen Programmes einfacher rum Doktern.

Zitat:
Anders gefragt kann eine QB.exe Quellcode erstellen, kompillieren, in sich aufnehmen, und als dieselbe *.exe erscheinen(abgesehen von Größenänderung)?

Eine Exe Datei kann sich nicht selbst überschreiben, du müsstest über Temporäre Dateien gehen.

Aber:
Solche Spielereien sind nicht gerade Benutzer freundlich, stell dir vor irgendwas geht nicht und du must Fehlersuche machen bei einem solchen komplexen Zusammenspiel.

Techniss wäre es durchaus machbar, aber der Aufwand steht in keinem Verhälltniss zum Nutzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 13.04.2006, 15:42    Titel: Antworten mit Zitat

Hallo dreael, mao und michael!

Antworten, die ich erst mal verdauen muß.


Frohes Ostereiersuchen ... äh dazu geht man übrigens ins Freie!



Nils offline lächeln
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
StrikerXP



Anmeldungsdatum: 23.04.2006
Beiträge: 4

BeitragVerfasst am: 23.04.2006, 01:11    Titel: Antworten mit Zitat

folgende Frage dazu:
Habe ein Programm mit einer GUI programmiert (Quelltext ca. 600 KB) das ein quasisimultanes Multitasking hat.
Es prüft ständig die Serielle Schnittstelle auf Signal (mit eigenem Protokoll zur komm. mit anderen Rechnern/Microkontrollern an einem Sternkoppler), Mausroutine, Eingabefeldern, Hintergrundoperationen (Speichern im HG)...

Nun sind in meinem Programm mehrere Unterprogramme eingebettet.

ein Vorteil wäre nun, wenn ich ein zusätzliches, eigens geschriebenes Programm "installieren" könnte indem ich es nachträglich für den entsprechenden Benutzerkreis hinzufügen könnte. CHAIN und RUN entfallen dabei, da die Kernelschleife dann in der Durchlaufgeschwindigkeit (norm. 2000 bis 5000 mal pro Sek. bei 75 MHz) drastisch sinkt und die Festplatte durch das öffnen/schließen dauerrotiert.

Ein einbinden von einem neuem Modul (bisher 7 von Haus aus) in das Programm wäre also total gut!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 23.04.2006, 09:16    Titel: Antworten mit Zitat

Etwa so sollte es gehen:
Ich würde die neuen Programme als Sub aufbauen, dann wird das Installieren und Deinstallieren einfacher.

Makiere mit Kommentaren die Stelle wo sich die neuen Programm einklinken dürfen.
Der Installer sucht dann diese Stelle (im Quellcode) und schreibt dort den Namen des Programmes (beziehungsweise Sub) ein.

Dann geht der Installer an das Ende des Quellcodes und fügt dort die eigentliche Subroutine ein.

Die Installation würde ich mit einem ausgelargten Konsolen Programm machen (das dann über RUN/CHAIN aufgerufen wird), so muss sich der Code nicht selbst verändern.
Da der auf Ruf recht selten ist, macht der Zeit bedarf von RUN/CHAIN nicht so viel aus.
Und während der Installation darf das GUI sowieso nicht laufen, sonst könnte es sich aufhängen.

Alternativ kann der Benutzer die Installation von Hand ausführen, in dem er genau das macht, was der Installer machen würde.
(Stelle suchen, Namen eintragen, ans Ende gehen, Code einfügen)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 23.04.2006, 15:39    Titel: Antworten mit Zitat

Ganz früher unter reinem MS-DOS war der sog. Overlay-Mechanismus noch in vielen professionellen Anwendungen verbreitet (z.B. AutoCAD), d.h. bei Bedarf wurden Maschinencode-Teile von .OVL-Dateien nachgeladen, denn nur so waren komplexe Programme mit 640 KB konventionellem RAM überhaupt lauffähig. Overlay war meines Wissens auch innerhalb von grossen .EXE-Dateien möglich, d.h. dass beim Ausführen nur ein Teil geladen wird und innerhalb der Anwendung sporadisch Teile nachgeladen wurden (hatte ich damals auf Diskettensystemen noch viel beobachtet).

Über Grundkonzepte, zugehörige Betriebssystemroutinen, geeignete Compiler und vor allem Linker usw. konnte ich jedoch auf die Schnelle nichts dazu finden.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
StrikerXP



Anmeldungsdatum: 23.04.2006
Beiträge: 4

BeitragVerfasst am: 23.04.2006, 16:02    Titel: Overlay Antworten mit Zitat

Ja, genau solche Overlays verwende ich in meinem Programm.
Und mit RUN/CHAIN geht es leider nicht schnell genug, da es jedesmal die Datei von neuem öffnet, abarbeitet und schließt. Und wenn es sich dann in dem gechainten Programmabschnitt um eine Multitasking-Operatgion geht, die ja eigentlich nur im Hintergrund laufen soll, belegt das allein die ganze Rechenzeit (dann wäre es ja nicht mehr "Speichern im Hintergrund", wenn es den Vordergrund belegt).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz