formato do Arquivo Principal

Propósito

Contém uma imagem de um processo no momento de um erro.

Descrição

Um arquivo .core é criado no diretório atual quando vários erros ocorrem. Erros como violações de endereço de memória, instruções ilegais, erros de barramento e sinais de quit gerados pelo usuário, comumente causam isso dump do núcleo. O arquivo núcleo que é criado contém uma imagem de memória do processo finalizado. Se o processo defeituoso for multiencadeado e o tamanho núcleo atual ulimit for menor do que o necessário para fazer o dump da seção de dados, então apenas a área de pilha de thread defeituoso é objeto de dumping da seção de dados.
Nota: O arquivo core dump pode ser dado um nome exclusivo usando o comando chcore . O comportamento padrão é o mesmo das versões anteriores do sistema operacional AIX.

Qualquer memória compartilhada alocada pelo processo também pode ser opcionalmente omitida do arquivo core. Esses dados são apenas omitidos se a variável de ambiente CORE_NOSHM for exportada. O padrão é incluir toda a memória compartilhada no arquivo core. A variável CORE_NOSHM pode ser configurada para qualquer valor.

A nomenclatura do arquivo core exclusivo só será ativada se a variável de ambiente CORE_NAMING for exportada. O nome padrão é core como em releases anteriores. O valor da variável deve ser configurado como true.

O conteúdo de um core dump é organizado sequencialmente no arquivo núcleo da seguinte forma:

Item Descrição
Cabeçalho do núcleo Define informações básicas sobre o core dump, e contém deslocamentos que localizam o restante das informações do core dump.
ldinfo estruturas Define informações do carregador.
mstsave estruturas Define informações do estado do encadeamento do kernel. Uma vez que a estrutura de thread de falhas mstsave é diretamente salva no cabeçalho principal, estruturas adicionais são salvas aqui apenas para programas multi-threaded.
Pilha de usuário padrão Contém uma cópia da pilha de usuários no momento do dump do núcleo.
Área de dados padrão (Opcional) Contém a seção de dados do usuário.
Regiões mapeadas da memória (Opcional) Contém as regiões mapeadas anonimamente.
vm_info estruturas (Opcional) Contém informações de deslocamento e tamanho para regiões mapeadas de memória.

Por padrão, os dados do usuário são, regiões mapeadas anonimamente e as estruturas vm_info não estão incluídas em um dump core. Este dump de núcleo parcial inclui a pilha de processo atual, pilha de encadeamento, as estruturas do encadeamento mstsave , a estrutura do usuário e o estado dos cadastros no momento da falha. Um dump de núcleo parcial contém informações suficientes para um traceback de pilha. O tamanho de um core dump também pode ser limitado pela subroutine setrlimit .

Para ativar um dump core completo, configure a sinalização SA_FULLDUMP na subroutine sigação para o sinal que é gerar um dump core completo. Se esta sinalização for definida quando o núcleo é despejado, a seção de dados é, regiões mapeadas anonimamente e as estruturas vm_info estão incluídas no dump core.

Os arquivos principais são despejados das seguintes formas:
  • Todos os núcleos de dumping estão no contexto do processo de execução. Eles são jogados com um proprietário e um grupo combinando o ID do usuário efetivo (UID) e o ID do grupo (GID) do processo. Se este par UID/GID não tiver permissão para gravar no diretório de destino determinado de acordo com os procedimentos de caminho principal padrão, nenhum arquivo core será objeto de dumping.
  • Se o ID do usuário real (RUID) for root, o arquivo principal sempre poderá ser despejado, mas com um modo de 0600.
  • Se o ID do usuário efetivo (EUID) corresponde ao real ID do usuário (RUID), e o ID do grupo efetivo (EGID) corresponde a qualquer grupo na lista de grupos da credencial, o arquivo core será objeto de dumping com permissões de 0600.
  • Se o EUID corresponde ao RUID, mas o EGID não corresponde a nenhum grupo na lista de grupos da credencial, o arquivo principal não pode ser despejado. O usuário efetivo não pode ver dados que eles não têm acesso.
  • Se o EUID não corresponder ao RUID, o arquivo core pode ser despejado apenas se você tiver configurado um diretório principal usando o comando caminho do sistema . Isso evita o dumping do arquivo principal no diretório de trabalho atual ou em um diretório de núcleos específicos do usuário de tal forma que não seja possível remover o arquivo principal. Núcleo é despejado com um modo de 0600. Se você não tiver usado o comando caminho do sistema para configurar um diretório core, nenhum núcleo é despejado.

O formato do cabeçalho principal é definido pela estrutura core_dump (no arquivo de cabeçalho core.h ), que é organizado da seguinte forma:

Item Nome do Campo Descrição
caractere c_signo O número do sinal que causou o erro.
caractere c_flag Um campo de bits que descreve o tipo de dump do núcleo. Os significados dos bits são os seguintes:
FULL_CORE
core contém as seções de dados (0x01)
CORE_VERSION_1
core foi gerado por AIX Versão 4 ou superior (0x02)
MSTS_VALID
core contém estruturas mstsave (0x04)
NÚCLEO_BIGDATA
core contém big data (0x08)
UBLOCK_VÁLIDO
core contém a estrutura u_block (0x10)
USTACK_VÁLIDO
core contém a pilha de usuários (0x20)
LE_VALID
core contém pelo menos um módulo (0x40)
CORE_TRUNC
core foi truncado (0x80)
curto c_entradas O número de módulos de core dump
struct ld_info * c_tab O deslocamento para o início da tabela principal
caddr_t c_stack O deslocamento para o início da pilha de usuários
int c_tamanho O tamanho da pilha de usuários
estruturar mstsave c_mst Uma cópia do mst defedor
usuário estruturar c_u Uma cópia da estrutura do usuário
int c_nmsts O número de estruturas mstsave referenciadas peloc_mstscampo
estruturar mstsave * c_msts O deslocamento para as estruturas mstsave de outras threads
int c_datasize O tamanho da região de dados
caddr_t c_dados O deslocamento para dados do usuário
int c_vmregiões O número de regiões mapeadas anonimamente
struct vm_info * c_vmm O deslocamento para o início da tabela vm_info