Bibliothek: exports-Klausel

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Bibliothek: exports-Klausel

Beitrag von Socke »

Hallo miteinander,

Drei Fragen:
  • Unter Windows kann man exportierten Symbolen einen Index zuweisen. Die Pascal-Sprachreferenz sagt,
    An index entry must be a positive number larger or equal than 1, and less than MaxInt.
    Im Buch "Free Pascal 2" heißt's hingegen auf Seite 275:
    Michaël van Canneyt hat geschrieben:Diese Indexzahl muß eine Zahl größer oder gleich 0 sein und kleiner als MaxInt.
    • Was ist richtig? Könnte das bitte jemand überprüfen, ich habe gerade kein Windows zur Hand.
    • Welches MaxInt ist gemeint? SmallInt von FPC oder Longint von OBJFPC?
  • Man kann (unter Linux) auch einen leeren Namen angeben (myfunc name ''). Resultiert das in einem gültigen Symbol?

    Code: Alles auswählen

    readelf -s ./project1
     
    Symbol table '.dynsym' contains 8 entries:
       Num:    Value  Size Type    Bind   Vis      Ndx Name
         0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
         1: 0000e1c0     5 FUNC    GLOBAL DEFAULT    7 abc
         2: 00000000     0 FUNC    GLOBAL DEFAULT  UND dlclose@GLIBC_2.0 (2)
         3: 00000000     0 FUNC    GLOBAL DEFAULT  UND dlsym@GLIBC_2.0 (2)
         4: 00060130     4 OBJECT  GLOBAL DEFAULT   11 myVar
         5: 00000000     0 FUNC    GLOBAL DEFAULT  UND dlopen@GLIBC_2.1 (3)
         6: 00000000     0 FUNC    GLOBAL DEFAULT  UND sqlite3_libversion
         7: 00000000     0 FUNC    GLOBAL DEFAULT  UND dladdr@GLIBC_2.0 (2)
    Eintrag 0 und Eintrag 1 bilden die selbe Funktion (abc) ab; im ersten Fall aber mit einem leeren Namen.
  • Werden unter Windows Symbole, die nur einen expliziten Index haben, auch mit ihrem Namen exportiert oder sind sie nur noch über ihren Index zugänglich?
Edit: dritte Frage hinzugefügt
Edit: dank sei Crosscompiler; ein paar Antworten, alle anderen Fragen sind weiterhin offen.
    • Der FPC interne Linker meint 0 wäre ungültig. Also ist 1 der niedrigste erlaubte Index.
    • Es ist MaxSmallInt gemeint; der FPC interne Linker schluckt aber bis $FFFF. Das ist also definitiv ein Bug (aber wo? Dokumentation oder Linker?)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Bibliothek: exports-Klausel

Beitrag von carli »

Rückfrage: Wozu benötigst du die Funktionsnummer-Grenzen so genau?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Bibliothek: exports-Klausel

Beitrag von Socke »

carli hat geschrieben:Rückfrage: Wozu benötigst du die Funktionsnummer-Grenzen so genau?
Ich möchte alle exportierten Symbole einer Bibliothek parsen. Da ist es an sich eigentlich egal, ob die Zahl ungültig (oder sogar eine Zeichenkette ist), da der FPC sie dann nicht übersetzt. Aber ich wollte so benutzerfreundlich sein, und darauf hinweisen, dass etwas nicht gültig ist.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten