Programme die im Seicher sind starten

Ihr habt ein Problem mit C++ oder anderen Sprachen ? Dann seit Ihr in diesem Forum genau richtig! Hier können alle Fragen gestellt werden, die mit Programmierung (MorphOS, Linux, BeOS, BSD,...) zu tun haben.

Moderatoren: analogkid, roschmyr

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

Programme die im Seicher sind starten

Beitragvon pegasossigi2 » 06 Feb 2014, 20:11

Weiß irgend einer ob man Programme, die ich selber im Speicher abgelegt habe,starten kann und wie?
Z.B Wenn ich ein MoprphOS Programm aus einem Archiv in den Speicher endpacke. Wie könnt man es starten?
MacMini G4/1.5GHz, PowerBook G4 1.667 GHz

Murmel
Seniormember
Seniormember
Beiträge: 876
Registriert: 19 Feb 2006, 01:50
Wohnort: München

Re: Programme die im Seicher sind starten

Beitragvon Murmel » 06 Feb 2014, 20:51

ähm Ramdisk öffnen und Icon doppelklicken. ?
oder shell öffnen cd Ram: dir ?
PM G5 Dual 2,0 GHZ /1,5 GB Ram / 2*150GB FP
PM G4 Dual 1,42GHZ / 2 GB Ram / 120 GB FP
Peg2 G4/1000 Mhz /512 MB Ram /80GB FP /R9250 128MB Ram

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

Re: Programme die im Seicher sind starten

Beitragvon pegasossigi2 » 06 Feb 2014, 22:11

Murmel hat geschrieben:ähm Ramdisk öffnen und Icon doppelklicken. ?
oder shell öffnen cd Ram: dir ?


Nein, das meine ich nicht.

Wenn ich ein Programm mit z.B. fopen -> fread -> fclose in den Speicherer lade, ist ja nichts in der ramdisk zu sehen.
Kurz: Ein Programm liegt im Speicher. Der Startpunkt des Speicherbereichs mit dem Programm ist Pointer x und die Länge
des Programms ist y. Wie kann ich dann ein Programm von dort starten ?
MacMini G4/1.5GHz, PowerBook G4 1.667 GHz

Benutzeravatar
Tom01
Stammgast
Stammgast
Beiträge: 24
Registriert: 20 Sep 2009, 13:28

Re: Programme die im Seicher sind starten

Beitragvon Tom01 » 06 Feb 2014, 23:34

Schau mal in die Autodocs bei dos.library LoadSeg.

p-OS
Tastaturkiller
Tastaturkiller
Beiträge: 257
Registriert: 17 Mai 2004, 21:51
Wohnort: Sengenthal
Kontaktdaten:

Re: Programme die im Seicher sind starten

Beitragvon p-OS » 06 Feb 2014, 23:35

Also du hast ein nromales ausführbares Programm auf der Platte. Und nun möchtest du, daß du von einem anderen Programm aus veranlasst, daß es in den Speicher geladen und ausgeführt wird ? Dazu mußt du selber nichts in den Speicher laden. Das kann alles das Betriebssystem für dich machen. In der dos.library findet sich die Funktion SystemTagList.

Thore
Blue Morpho
Blue Morpho
Beiträge: 2630
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Re: Programme die im Seicher sind starten

Beitragvon Thore » 07 Feb 2014, 10:10

Wenn Du ein kurzes Assemblerprogramm in den Speicher schreibst (ohne header), reicht ein Jump auf die Startadresse. Wenn Du eine externe Datei so laden willst, mach es wie die Vorredner gesagt haben mit der SegList und Dos-Library. Also LoadSeg und CreateProc solltest Du Dir mal in den Developer Docs anschauen.
http://www.disk-doktor.de

Benutzeravatar
geit
Seniormember
Seniormember
Beiträge: 856
Registriert: 30 Mär 2006, 12:17
Wohnort: 48477 Hörstel
Kontaktdaten:

Re: Programme die im Seicher sind starten

Beitragvon geit » 03 Mär 2014, 23:55

Normalerweise nutzt man dazu SystemTagList() oder Execute(). Damit werden Programme geladen und gestartet.

Selber kannst du Programme nicht einladen, da sie in Sektionen eingeteilt sind. Es gibt da u.a. Sektionen für Programmcode, Daten (Texte und vordefinierte Tabellen und Variablen), uninitiallisierte Daten (dann steht im Segment nur die Länge drin und beim Laden wird entsprechender Speicher allokiert und andere Typen. Der Programmkode muß außerdem relokiert werden, damit Sprünge zur Ladeadresse passen.

Du kannst zwar wie Tom01 geschrieben hat LoadSeg() verwenden und mit RunCommand() starten, aber das beinhaltet neue Probleme. Es funktioniert nämlich mit den meisten Programmen nur ein Mal.

Das liegt daran, das die oben genannten Datensektionen natürlich beim ersten Start verändert werden, das Programm aber beim zweiten Start komplett andere Werte bekommt und dann mit ziemlicher Sicherheit abstürzt.

Mehrfach starten klappt nur bei Programmen die "Pure" sind. Die erkennt man am "P" Flag, wenn man die Dateien listet (siehe MOSSYS:c).

Diese Programme lassen sich mit dem Befehl Resident in den Speicher laden und sie bleiben dort. Startet man sie erneut macht die Shell nur ein RunCommand() über den schon geladenen Befehl. Diese Befehle wurden aber so geschrieben und compiliert, damit das funktioniert. In den Programmen dürfen keine globalen Variablen vorkommen. Erstens, wegen dem oben genanntem Kram und zweitens, weil sie ja zweimal zur selben Zeit gestartet werden können und dann würden beide Instanzen in die gleichen Variablen verschiedene Daten ablegen wollen, was nicht funktionieren kann.

Geit


Zurück zu „Code-Küche“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast