O formato Windows Portable Executable tem suas próprias pequenas nuances, então aqui está um guia rápido de como eles funcionam.

Um Windows Portable Executable (PE) é o formato de arquivo nativo do Windows para executáveis ​​e outros tipos de arquivos binários. O formato de arquivo PE é projetado para ser independente de plataforma, portanto, pode ser usado em qualquer máquina Windows executando a mesma versão do sistema operacional e arquitetura do processador para o qual o arquivo foi compilado.

Então, vamos dissecar o formato de arquivo do Windows PE e aprender sobre sua estrutura e componentes constituintes.

O que é um arquivo executável portátil do Windows?

Antes de explorar o formato Windows Portable Executable, é importante esclarecer o básico. Vamos dar um passo para trás e aprender sobre o conceito subjacente do Windows PE — COFF.

Quando você compila o código-fonte para um programa, o compilador gera um arquivo objeto (.obj). Este arquivo objeto contém instruções para o computador em formato binário.

instagram viewer

COFF ou Common Object File Format é um conjunto padronizado de convenções para representar instruções binárias. O COFF ajuda a manter a compatibilidade entre plataformas, pois todos os formatos de arquivo COFF seguem o mesmo conjunto de regras e convenções para organizar código e dados. Embora COFF tenha sido originalmente desenvolvido para uso em sistemas *NIX, agora é onipresente em todas as plataformas.

O formato de arquivo Windows Portable Executable (PE) é uma modificação do COFF e foi desenvolvido para ser usado exclusivamente em Sistemas Windows de 32 e 64 bits. Ao contrário do COFF, que fornece um formato padronizado para arquivos de objeto, o Windows PE fornece um formato padronizado para executáveis ​​e arquivos de biblioteca.

Ele contém seções e cabeçalhos que fornecem informações sobre o executável em questão e ajudam o carregador do sistema a gerenciar os dados relacionados ao executável. Os cabeçalhos em um arquivo PE ajudam o carregador do sistema a mapear o arquivo na memória, resolver dependências como exportações/importações de API, gerenciar recursos e preparar o arquivo para execução.

O Linux também tem sua própria iteração do COFF; é chamado Arquivo de link executável ou, em suma, binário ELF. Você pode verificar se um arquivo é ELF ou não executando o comando de arquivo no Linux com o nome do arquivo como primeiro argumento.

A estrutura de um executável portátil do Windows

O formato de arquivo Portable Executable consiste em vários componentes, cada um com uma finalidade específica. Esses componentes incluem:

  • Cabeçalhos de seção, que descrevem o layout e as características de cada seção do arquivo. As próprias seções, que contêm código executável, dados e recursos.
  • O cabeçalho PE, que fornece informações sobre a estrutura geral e os requisitos do arquivo.
  • O cabeçalho do DOS, que inclui um pequeno programa executado quando o arquivo é executado em um sistema DOS.
  • E, finalmente, os cabeçalhos da seção PE, que descrevem a localização e os atributos de cada seção no arquivo.

No geral, esses componentes trabalham juntos para criar um formato estruturado que permite que o sistema operacional carregue, execute e gerencie adequadamente o código executável contido no arquivo. Vamos aprender exatamente o que cada componente faz.

Cabeçalho DOS

A primeira parte de um arquivo PE é chamada de cabeçalho DOS. Uma pequena quantidade de código executável é armazenada no cabeçalho DOS, que também pode ser executado em uma máquina DOS.

Esse código também é chamado de stub do MS-DOS e é usado para lançar uma mensagem de erro em sistemas que não oferecem suporte ao arquivo PE.

Cabeçalho PE

O cabeçalho Portable Executable fornece informações sobre o executável, como o tamanho do arquivo, onde as diferentes partes estão localizadas e quais recursos o executável precisa. O cabeçalho PE também contém informações sobre o tipo de executável, se é um Arquivo .DLL do Windows ou um .EXE.

Cabeçalhos de seção

As seções são implementadas para organizar os vários componentes de um executável, como código, dados e recursos como strings de texto, imagens, etc. Os cabeçalhos de seção incluem informações sobre o tamanho e localização de cada seção, bem como quaisquer sinalizadores associados.

Os sinalizadores associados a cada cabeçalho de seção podem indicar vários atributos da seção, como se ela é executável, gravável ou legível. Esses sinalizadores ajudam o sistema operacional a carregar e gerenciar adequadamente o conteúdo de cada seção durante a execução do programa.

Seções

As próprias seções compreendem o código, os dados e os recursos reais do executável. Cada segmento é alinhado a um determinado limite de memória e possui seu próprio conjunto de atributos que afetam como o sistema operacional o manipula.

Agora você sabe tudo sobre o formato de arquivo executável portátil do Windows

O Windows Portable Executable é um formato de arquivo robusto e versátil usado para produzir uma ampla variedade de aplicativos do Windows e componentes do sistema. Compreendendo a estrutura do formato de arquivo PE, os desenvolvedores podem construir aplicativos eficientes que aproveitam as características distintas do Windows.

Além de obter uma compreensão profunda da plataforma em que seu aplicativo será executado, seguindo alguns bons padrões práticas de codificação, você poderá maximizar a qualidade do aplicativo, independentemente da plataforma em que é executado sobre.