ldshread ou ldnshread Subroutine
Propósito
Lê um cabeçalho de seção de um arquivo XCOFF.
Biblioteca
Biblioteca de Rotina de Acesso de Arquivo de Objeto (libld.a).
Sintaxe
#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;Descrição
A sub-rotina ldshread lê o cabeçalho da seção especificado pelo parâmetro SectionIndex do arquivo de objeto comum atualmente associado com o parâmetro ldPointer na área de memória começando no local especificado pelo parâmetro SectionHead.
A sub-rotina ldnshread lê o cabeçalho da seção nomeado pelo argumento SectionName na área de memória começando no local especificado pelo parâmetro SectionHead . É de responsabilidade da rotina de chamada fornecer um ponteiro para um buffer grande o suficiente para conter o cabeçalho da seção do arquivo objeto associado. Como a sub-rotina ldopen fornece informações de número mágico (por meio da macro HEADER (ldPointer ) .f_magic ), o aplicativo de chamadas pode sempre determinar se o ponteiro SectionHead deve se referir a uma estrutura de 32 bits SCNHDR ou 64 bits SCNHDR_64 ..
Apenas o primeiro cabeçalho de seção nomeado pelo argumento SectionName é retornado pela sub-rotina ldshread ..
Parâmetros
| Item | Descrição |
|---|---|
| ldPointer | Aponta para uma estrutura LDFILE que foi devolvida como o resultado de uma chamada bem-sucedida para o ldopen, lldopenou ldaaberto subroutine. |
| SectionIndex | Especifica o índice do cabeçalho da seção a ser lido. Nota: A primeira seção tem um índice de 1.
|
| SectionHead | Aponta para um buffer grande o suficiente para aceitar uma estrutura de 32-bit ou uma 64-bit SCNHDR , de acordo com o modo de objeto do arquivo sendo lido. |
| SectionName | Especifica o nome do cabeçalho da seção a ser lido. |
Valores De Retorno
As subroutines ldshread e ldnshread retornam um valor SUCCESS ou FRACASSO.
Códigos De Erro
A sub-rotina ldshread falha se o parâmetro SectionIndex for maior que o número de seções no arquivo de objeto. A sub-rotina ldnshread falha se não houver nenhuma seção com o nome especificado pelo parâmetro SectionName. Ou a função falha se não puder ler o cabeçalho de seção especificado.
Exemplos
A seguir é um exemplo de código que abre um arquivo de objeto, determina seu modo e usa a subroutine ldnshread para adquirir o cabeçalho da seção .text. Este código seria compilado com ambos __XCOFF32__ e __XCOFF64__ definidos:
#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... */
}
}