Sous-routine ldshread or ldnshread
Objectif
L'annonce un en-tête de section d'un fichier XCOFF.
Bibliothèque
Bibliothèque de routines d'accès au fichier objet (libld.a)
Syntaxe
#include <stdio.h>
#include <ldfcn.h>
int ldshread (ldPointer,SectionIndex,SectionHead)
LDFILE *ldPointer;
unsigned short SectionIndex;
void *SectionHead;
int ldnshread (ldPointer,SectionName, SectionHead)
LDFILE *ldPointer;
char *SectionName;
void *SectionHead;Descriptif
La sous-routine ldshread lit l'en-tête de section spécifié par le paramètre SectionIndex du fichier objet commun actuellement associé au paramètre ldPointer dans la zone de mémoire à partir de l'emplacement spécifié par le paramètre SectionHead.
La sous-routine ldnshread lit l'en-tête de section nommé par l'argument SectionName dans la zone de mémoire à partir de l'emplacement spécifié par le paramètre SectionHead . Il est de la responsabilité de la routine d'appel de fournir un pointeur à une mémoire tampon suffisamment grande pour contenir l'en-tête de section du fichier objet associé. Etant donné que la sous-routine ldopen fournit des informations de nombre magique (via la macro HEADER (ldPointer ) .f_magic ), l'application appelante peut toujours déterminer si le pointeur SectionHead doit faire référence à une structure SCNHDR 32 bits ou SCNHDR_64 64 bits.
Seul le premier en-tête de section nommé par l'argument SectionName est renvoyé par la sous-routine ldshread .
Paramètres
| Article | Descriptif |
|---|---|
| ldPointer | Pointe vers une structure LDFILE renvoyée en tant que résultat d'un appel réussi vers le sous-programme Ldopen, Lldopenou Ldaopen . |
| SectionIndex | Indique l'index de l'en-tête de section à lire. Remarque: La première section a un index de 1.
|
| SectionHead | Pointe vers une mémoire tampon suffisamment grande pour accepter une structure SCNHDR 32 bits ou 64 bits, en fonction du mode d'objet du fichier en cours de lecture. |
| SectionName | Indique le nom de l'en-tête de section à lire. |
Valeurs renvoyées
Les sous-programmes Ldshread et Ldnshread renvoient une valeur SUCCESS ou FAILURE.
Codes d'erreur
La sous-routine ldshread échoue si le paramètre SectionIndex est supérieur au nombre de sections dans le fichier objet. La sous-routine ldnshread échoue s'il n'y a pas de section avec le nom spécifié par le paramètre SectionName. La fonction échoue s'il ne peut pas lire l'en-tête de section spécifié.
Exemples
Voici un exemple de code qui ouvre un fichier objet, détermine son mode et utilise la sous-routine Ldnshread pour acquérir l'en-tête de section .text. Ce code sera compilé avec __XCOFF32__ et __XCOFF64__ définis:
#define __XCOFF32__
#define __XCOFF64__
#include <ldfcn.h>
/* for each FileName to be processed */
if ( (ldPointer = ldopen(FileName, ldPointer)) != NULL )
{
SCNHDR SectionHead32;
SCNHDR_64 SectionHead64;
void *SectionHeader;
if ( HEADER(ldPointer).f_magic == U802TOCMAGIC )
SectionHeader = &SectionHead32;
else if ( HEADER(ldPointer).f_magic == U803XTOCMAGIC )
SectionHeader = &SectionHead64;
else
SectionHeader = NULL;
if ( SectionHeader && (ldnshread( ldPointer, ".text", SectionHeader ) == SUCCESS) )
{
/* ...successfully read header... */
/* ...process according to magic number... */
}
}