# Diretórios de Dados

No final do cabeçalho opcional, mas ainda como parte dele, temos os diretórios de dados, ou *Data Directories*. São 16 diretórios ao todo, mas um executável pode conter somente alguns. Nos concentraremos, nos mais importantes para este estudo inicial. A estrutura de cada diretório de dados é conhecida por IMAGE\_DATA\_DIRECTORY e tem a seguinte definição:

```c
typedef struct _IMAGE_DATA_DIRECTORY {
    uint32_t   VirtualAddress;
    uint32_t   Size;
} IMAGE_DATA_DIRECTORY;
```

Vejamos alguns diretórios importantes neste momento:

## Export Table

O primeiro diretório de dados aponta para a tabela de ***exports***, ou seja, de funções exportadas pela aplicação. Por este motivo, a presença deste diretório (campos *VirtualAddress* e *Size* com valores diferentes de zero) é muito comum em bibliotecas.

O campo *VirtualAddress* aponta para uma outra estrutura chamada EDT (*Export Directory Table*), que contém os nomes das funções exportadas e seus endereços, além de um ponteiro para uma outra estrutura, preenchida em memória, chamada de EAT (*Export Address Table*).

## Import Table

Sendo a contraparte do *Export Table*, o diretório *Import Table* aponta para uma tabela de ***imports***, ou seja, de funções importadas pela aplicação. Tal tabela é chamada de IDT (*Import Directory Table*). Nós a estudaremos em mais à frente.

## Resource Table

Aponta para uma estrutura de árvore binária que armazena todos os *resources* num executável como ícones, janelas e *strings*, principalmente quando o programa suporta vários idiomas.

## Certificate Table

Antigamente chamado de "Security", este diretório contém o endereço da *Certificate Table*, que pode conter um certificado para binários assinados digitalmente.

## IAT

Este diretório aponta para a **Import Address Table**, que veremos em breve.

## CLR Runtime Header

Para binários criados em .NET, há um outro cabeçalho específico que é apontado por este diretório.

A ordem na qual estes diretórios aparecem no arquivo PE é especificada na documentação do formato. Vamos agora para o nosso último cabeçalho, o das Seções.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mentebinaria.gitbook.io/engenharia-reversa/05-o-formato-pe/cabecalhos/diretorios.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
