PDA

View Full Version : QWCCCRVC zerstört



Seiten : 1 [2] 3

Fuerchau
22-11-11, 15:16
Allerdings weiß ich nicht, ob das Schreiben der SEPT in V5R2 nicht schon verhindert wird.

Pikachu
22-11-11, 15:23
Mit STRSST Display/Alter/Dump sollte das doch eigentlich gehen.

j.k.
23-11-11, 09:50
Ich würds umgekehrt machen: Die Adresse des Programmobjekts in die SEPT kopieren. ;)

Ist das denn die genaue Adresse für dieses Objekt?

Dann würd ich das mal ausprobieren... :)

BenderD
23-11-11, 10:32
... nur so am Rande, wenn du dich da vermalst, kannst du die Lage übelst verschlimmbessern. Der dokumentierte Weg ist: Fehlermeldung und auf PTF warten.

D*B

Fuerchau
23-11-11, 10:37
Bei V5R2 wirds da wohl nichts mehr geben.
Neu/Reparaturinstallation ist wohl der einzige Weg.

Pikachu
23-11-11, 12:22
Ein DMPOBJ OBJ(QSYS/QWCCCRVC) OBJTYPE(*PGM) erstellt eine Spooldatei, in der die Adresse dieses Programmobjekts steht (links oben in der Spooldatei).

Ein DMPSYSOBJ OBJ(QINSEPT) CONTEXT(QSYS) TYPE(19) SUBTYPE(C3) erstellt eine Spooldatei, in der die Positionen der verschiedenen Programmobjekte in der SEPT stehen.

...
000530 SYP 02 01 QWCCCRVC 04 01 QSYS
...

Bei euch steht da vermutlich "Objekt zerstört".

Per STRSST > "Start a service tool" > "Display/Alter/Dump" > "Display/Alter storage" > "Machine Interface (MI) object" > "Space (19)" > "Find by object name and context name" kann der Inhalt des Objekts:

Object: (19) - Space / QINSEPT / C3
Context: QSYS / 01

unter "Hexadecimal, alter capable" angezeigt werden.

Hier sollte in der Zeile 1530 (!) an den Stellen XXXXXXXX XX die ersten 5 Bytes der Adresse (siehe oben) des Programmobjekts QWCCCRVC stehen.

1530 00048000 00000000 XXXXXXXX XX00023F

Überprüft das mal auf einem anderen System von euch (DMPOBJ um die Adresse zu ermitteln und STRSST um in die SEPT an Position 1530 zu sehen)!

Mittels "F11=Alter storage" können die Stellen XXXXXXXX XX geändert werden. (Vor dem Ändern unbedingt den vorherigen Inhalt notieren !!!)

Alle Angaben ohne Gewähr !!!
Seid vorsichtig beim Ändern !!! ;)

Fuerchau
23-11-11, 12:50
Auch wenn ihr mir nicht glauben wollt, aber Pointer unterliegen da einem besonderen Schutz.
Ändert man einen Pointer mit Daten, wird der Pointer zerstört und als Daten interpretiert.

Dies ist seit V5R1 so, damit man nicht mal eben aus Daten einen Pointer machen kann und somit Berechtigungen umgehen könnte oder sonstige Zugriffe erhält.
Im MI gibt es daher auch unterschiedliche Befehle:
CPYBLA -> Copy bytes
CPYBWP -> Copy with Pointer
Beim CPYBLA werden alle Bytes kopiert, ggf. enthaltene Pointer werden zerstört und sind nicht mehr als Pointer verwendbar.

Ich denke nicht, dass SST die Daten als Pointer erkennt und damit beim Überschreiben auch als Pointer, vor allem Systempointer, setzt.

Ich glaube auch nicht, dass die SEPT hier zerstört ist, da es beim direkten Aufruf mit der SEPT-Adresse sonst einen "Illegal Pointer"-Fehler geben würde.
Da aber das Objekt benannt wurde ist dieses irgendwie tatsächlich kaputt.
Das kann man zwar aus einem anderen System kopieren, wobei allerdings eine neue Adresse (Pointer) entsteht.

Meine Empfehlung, auch wenn's schwer fällt: Reparaturinstallation!

Pikachu
23-11-11, 16:31
Auch wenn ihr mir nicht glauben wollt, aber Pointer unterliegen da einem besonderen Schutz.
Ändert man einen Pointer mit Daten, wird der Pointer zerstört und als Daten interpretiert.
Hier steht was Interessantes über diese MI-Zeiger (http://www.mcpressonline.com/programming/rpg/a-close-study-of-i5os-machine-interface-mi-pointers.html). Demnach sind in der SEPT komplette MI-Zeiger drin, mit allen ihren 16 Bytes. Und durch Ändern des Segmentteils des Zeigers werden die ersten 8 Bytes, die den Typ des Zeigers enthalten, ja nicht gelöscht.

Fuerchau
23-11-11, 17:07
Das mag ja alles so stimmen, aber nochmal, wenn du einen Pointer als Zeichen (16 Bytes) kopierst ist das Ziel kein Pointer mehr auch wenn ja alles bitweise identisch ist.
Ich denke auch das verändern einzelner Bytes zerstört den Pointer.

Wenn ich mal Zeit habe, probier ich das aus.

Christian Bartels
25-11-11, 08:29
Das mag ja alles so stimmen, aber nochmal, wenn du einen Pointer als Zeichen (16 Bytes) kopierst ist das Ziel kein Pointer mehr auch wenn ja alles bitweise identisch ist.
Ich denke auch das verändern einzelner Bytes zerstört den Pointer.


Das gilt wohl, wenn man per Programm auf Adressen ändert. Wenn man den Pointer aber über SST ändert, hat man das selber in der Hand: Neben den Spalten mit den Daten gibt es eine Spalte "Tags active", und in der steht ein "T", wenn es sich um einen gültigen System Pointer oder Space Pointer handelt. Wenn man hier (z.B. in der SEPT) eine Adresse mit einem neuen Wert überschreibt und das "T" nicht rausnimmt, bleibt der Pointer gültig. Da in der SEPT sogenannte "System Pointer" stehen, also Pointer, die immer auf eine Segment Boundary verweisen(letzte drei Bytes = X'000000'), werden die beiden letzten Bytes für Zusatzinformationen verwendet: Das vorletzte Byte ist der Objekttyp (X'02' für Programm), das letzte Byte ist die Public Authority. Deshalb dürfen die beim der Reparatur nicht überschrieben werden.

Mit freundlichen Grüßen,
Christian Bartels.