Por que não 'remove' cabeçalhos de seção dos executáveis ELF?

6

Um executável ELF mínimo requer apenas o cabeçalho ELF e pelo menos um cabeçalho de programa para ser funcional. No entanto, quando executo strip em um executável curto, ele decide não descartar a tabela de cabeçalho de seção ou a seção de strings de seção, mantendo-as em volta, embora não tenham nenhum propósito (até onde eu sei) para a execução do programa.

Existe um motivo pelo qual eles não são removidos por faixa? Existe outro utilitário que remove tudo o que não é necessário para o executável executar? Eu tentei editar manualmente o executável de golfe de código que estava fazendo para remover os cabeçalhos de seção, e parece funcionar bem, e ser muito menor.

    
por Mystor 02.03.2016 / 14:22

1 resposta

2

A documentação do GNU binutils strip alude ao motivo, mas não é explícito, mencionando na descrição de --only-keep-debug que

Note - the section headers of the stripped sections are preserved, including their sizes, but the contents of the section are discarded. The section headers are preserved so that other tools can match up the debuginfo file with the real executable, even if that executable has been relocated to a different address space.

Ou seja, a menos que seja explicitamente informado por meio da opção -R , strip reterá cabeçalhos de seção para ajudar outros programas (incluindo gdb ) a realizar seu trabalho.

A página Uso correto do comando strip (parte do Engenharia reversa usando o sistema operacional Linux )

Running the strip command on an executable is the most common program protection method. In its default operation, the strip command removes the symbol table and any debugging information from an executable. This is how it is typically used. However, there is still useful information that is not removed.

e continua a enumerar várias coisas úteis que podem ser deixadas para trás - para análise de um executável "despojado".

Em Aprendendo a Análise Binária do Linux , isto é reiterado, comentando os cabeçalhos das seções normalmente só estão faltando quando alguém removeu-os deliberadamente e, sem os cabeçalhos das seções, gdb e objdump são quase inúteis.

    
por 03.08.2016 / 03:21