[NEWSboard IBMi Forum]

Thema: CL-Variable

  1. #1
    Registriert seit
    May 2004
    Beiträge
    4

    Question CL-Variable

    Hallo! Wer kennt sich aus?

    Was passiert, wenn ich in eine CL-Variable, die mit einer Länge 30 deklariert wird, einen längeren String übergebe?

    Danke

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    OS400 verwnedet Call by reference, d.h. die Variable ist im aufrufenden Programm mit Speicher hinterlegt und es wird ein Pointer auf den Speicher an das aufgerufene Programm übergeben.

    Zitat Zitat von niki
    Hallo! Wer kennt sich aus?

    Was passiert, wenn ich in eine CL-Variable, die mit einer Länge 30 deklariert wird, einen längeren String übergebe?

    Danke
    In diesem Fall sind im aufgerufenen Programm die ersten 30 byte zugänglich, der Rest bleibt unverändert. Umgekehrt wird es kriminell, wenn man den Parameter im aufgerufenen Programm länger deklariert als im aufrufenden, wird lustig im Speicher des aufrufenden Programmes rumgemalt, damit können dann Variablen verdonnert werden, die nicht übergeben wurden, oder sogar Code-Segmente beschädigt werden.

    mfg

    Dieter Bender
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    @Dieter
    Code kann nicht geschädigt werden, da er unter Speicherschutz steht, aber das Überschreiben von Datenbereichen ist sehr wahrscheinlich. Wenn nur Lesend zugegriffen wird ist das meist kein Problem. Viele Schnittstellen-Programme arbeiten so (API's) allerdings immer mit einer Längeninformation wieviel denn nun verwendet werden darf.
    Bei falscher Längeninfo knallts dann auch meist, allerdings häufig an Stellen, die mit dem direkten Aufruf aber auch gar nichts mehr zu tun haben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo Baldur,

    das mit dem Speicherschutz, das habe ich auch schon gelesen, alleine mir fehlt der Glaube. Wenn ich einen MCHK zurück bekomme, interpretiere ich das so, dass das OS feststellt: "eigentlich wollte ich diesen Speicher ja schützen"; ich bin nach wie vor der Meinung, dass die, die OS400 C2 gegeben haben volltrunken gewesen sein müssen.

    Dieter Bender

    Zitat Zitat von Fuerchau
    @Dieter
    Code kann nicht geschädigt werden, da er unter Speicherschutz steht, aber das Überschreiben von Datenbereichen ist sehr wahrscheinlich. Wenn nur Lesend zugegriffen wird ist das meist kein Problem. Viele Schnittstellen-Programme arbeiten so (API's) allerdings immer mit einer Längeninformation wieviel denn nun verwendet werden darf.
    Bei falscher Längeninfo knallts dann auch meist, allerdings häufig an Stellen, die mit dem direkten Aufruf aber auch gar nichts mehr zu tun haben.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Was soll das OS denn anderes machen als einen MCH-Fehler: Speicherschutzverletzung zurückzumelden. Windoof gibt dann nur einen Blue-Screen !
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo Baldur,

    wenn ich mich recht erinnere, bekomme ich den MCHK wenn ich im Call Stack nach oben komme und ich würde den eigentlich im aufgerufenen Programm bei dem Zugrif erwarten.

    Zitat Zitat von Fuerchau
    Was soll das OS denn anderes machen als einen MCH-Fehler: Speicherschutzverletzung zurückzumelden. Windoof gibt dann nur einen Blue-Screen !
    Ehrlicherweise muss man natürlich dazusagen, dass bei Windows sich das ganze im Multithreaded Kontext abspielt und was OS400 macht, wennn ich aus einem unter WebsFear laufenden Java Programm ein CL aufrufe, das solchen Unfug treibt ... und außerdem erwarte ich von OS400 ein wenig mehr als von Windows.

    mfg

    Dieter Bender
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Dies liegt im Einspeicher-Konzept begründet.
    Durch die Art der Pointer-Definition (SPCPTR, SYSPTR) kann ich sowieso nur auf Variablen zugreifen, die per Basis SPCPTR definiert sind.
    Ich kann auch seit V4 keine Pointerart mehr ändern was nun auch zu einem MCH-Fehler führt, sondern ich muss gezielt die Pointer-Befehle verwenden.
    Wenn ich nun mal eine Variable "based(xyz)" deklariere bin ich selber für die korrekte Verarbeitung verantwortlich (war übrigens schon immer so).

    Erst mit Windows-COM gibt es sowas eher selten, da es keinen Call by Reference mehr gibt, sondern alle Variablen über Kopien ausgetauscht werden. Wenn ich da allerdings auch drüber weggehe kommt es irgendwann und selten sofort zu abstürzen.

    Bei Java ist das dann eher wie bei Basic. Ich habe z.B. den Variablentyp String, dessen Inhalt bei jeder Veränderung eine neue Adresse bekommt. Die Variable String selber enthält nur einen Verweis auf den aktuellen Speicher und ich kann String nur mit den zugelassenen Methoden verändern.
    Rufe ich allerdings eine DLL auf kann das schon wieder platzen.

    Das gleiche gilt auch für Array's, Variant usw.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. num. CL Variable in Alpha umsetzen?
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-01-07, 14:31
  2. cl declare variable
    By TARASIK in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-08-06, 10:09
  3. Übergabeparameter im CL Script
    By bo1 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-06-06, 15:00
  4. String mit HexInhalt muss als Hex-Wert in Variable
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-05-06, 07:45
  5. CL Variable an SQL übergeben
    By Jenne in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 23-08-04, 10:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •