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... */
    }
}