Comandos Linux – Comando strip

Comando strip do Linux

comando strip

Em sistemas operacionais do tipo Unix, o comando strip descarta símbolos de arquivos de objetos compilados .

Este documento descreve a versão Linux do strip .

Descrição

strip é um utilitário GNU para “retirar” símbolos de arquivos de objetos. Isso é útil para minimizar o tamanho do arquivo , simplificando-os para distribuição. Também pode ser útil para dificultar a engenharia reversa do código compilado .

A lista de arquivos de objetos fornecidos para remover pode incluir arquivos e pelo menos um arquivo de objeto deve ser fornecido. Os próprios arquivos de objeto são modificados por faixa ; novos arquivos não são criados .

Sintaxe

strip [ opções ] objfile [...]

Opções

-F bfdname , –target = bfdname Trate o original objfile como um arquivo com o formato de código objeto nomedab , e reescrevê-lo no mesmo formato.
–Socorro Mostre um resumo das opções para remover e sair.
–info Exiba uma lista mostrando todas as arquiteturas e formatos de objeto disponíveis.
-I bfdname , –input -target = bfdname Trate o original objfile como um arquivo com o formato de código objeto nomedab .
-O bfdname , –output-target = bfdname Substitua objfile por um arquivo no formato de saída bfdname .
-R nome da seção , –remove-section = sectionname Remova qualquer seção chamada sectionname do arquivo de saída. Esta opção pode ser dada mais de uma vez. Observe que o uso inadequado dessa opção pode tornar o arquivo de saída inutilizável.
-s , –strip-all Remova todos os símbolos.
-g , -S , -d , –strip-debug Remova apenas os símbolos de depuração.
–strip-dwo Remova o conteúdo de todas as seções DWARF .dwo , deixando as seções de depuração restantes e todos os símbolos intactos.
– sem necessidade de tira Remova todos os símbolos que não são necessários para o processamento de realocação.
-K symbolname , –keep-symbol = symbolname Ao retirar símbolos, mantenha o símbolo symbolname, mesmo que normalmente seja retirado. Esta opção pode ser dada mais de uma vez.
-N symbolname , –strip-symbol = symbolname Remova o símbolo nome do símbolo do arquivo de origem. Esta opção pode ser dada mais de uma vez e pode ser combinada com outras opções de faixa, exceto -K .
-o arquivo Coloque a saída removida no arquivo, em vez de substituir o arquivo existente. Quando esse argumento é usado, apenas um argumento de objfile pode ser especificado.
-p , –preserve-datas Preserve as datas de acesso e modificação do arquivo.
-D , –enable-deterministic-archives Opere no modo determinístico. Ao copiar membros do arquivo morto e escrever o índice do arquivo morto, use zero para UIDs, GIDs, carimbos de data e hora e use modos de arquivo consistentes para todos os arquivos.
-w , –wildcard Permitir expressões regulares em nomes de símbolos usados ​​em outras opções de linha de comando . Os operadores de ponto de interrogação ( ? ), Asterisco ( * ), barra invertida ( \ ) e colchetes ( [] ) podem ser usados ​​em qualquer lugar do nome do símbolo. Se o primeiro caractere do nome do símbolo for o ponto de exclamação ( ! ), O sentido da chave será revertido para esse símbolo. Por exemplo:

-w -K! Foo -K fo *

faria com que a tira mantivesse apenas símbolos que começam com as letras ” fo “, mas descartasse o símbolo ” foo “.

-x , –discard-all Remova símbolos não globais.
-X , –discard-locals Remova os símbolos locais gerados pelo compilador. (Geralmente, começam com ` L ‘ou` . ‘.)
–keep-file-symbols Ao remover um arquivo, talvez com –strip-debug ou –strip-desnecessário , mantenha todos os símbolos que especifiquem os nomes dos arquivos de origem, que de outra forma seriam removidos.
–only-keep-debug Retire um arquivo, removendo o conteúdo de qualquer seção que não seria removida por –strip-debug e deixando as seções de depuração intactas. Nos arquivos ELF, isso preserva todas as seções de notas na saída.

A intenção é que esta opção seja usada em conjunto com –add-gnu-debuglink para criar um executável em duas partes. Um binário despojado que ocupará menos espaço na RAM e em uma distribuição e o segundo um arquivo de informações de depuração, necessário apenas se as habilidades de depuração forem necessárias. O procedimento sugerido para criar esses arquivos é o seguinte:

  1. Vincule o executável normalmente. Supondo que é chamado foo então …
  2. Execute objcopy –only-keep-debug foo foo.dbg para criar um arquivo contendo as informações de depuração.
  3. Execute objcopy –strip-debug foo para criar um executável despojado.
  4. Execute objcopy –add-gnu-debuglink = foo.dbg foo para adicionar um link às informações de depuração no executável removido.

Nota – a escolha de .dbg como uma extensão para o arquivo de informações de depuração é arbitrária; pode ser qualquer coisa. Além disso, a etapa –only-keep-debug é opcional. Você poderia fazer o seguinte:

  1. Vincule o executável normalmente.
  2. Copie foo para foo.full
  3. Executar strip –strip-debug foo
  4. Execute objcopy –add-gnu-debuglink = foo.full foo

Em outras palavras, o arquivo apontado pelo –add-gnu-debuglink pode ser o executável completo. Ele não precisa ser um arquivo criado pela opção –only-keep-debug .

Nota – essa opção deve ser usada apenas em arquivos totalmente vinculados. Não faz sentido usá-lo em arquivos de objetos em que as informações de depuração podem estar incompletas. O gnu_debuglink recurso atualmente suporta apenas a presença de um nome do arquivo que contém informações de depuração, e não vários nomes de arquivo em uma base one-per-objeto-arquivo.

-V , –version Mostra o número da versão da faixa.
-v , –verbose Saída detalhada : lista todos os arquivos de objeto modificados. No caso de arquivos, ` strip -v ‘lista todos os membros do arquivo.

Exemplos

strip -s a.out

O exemplo acima retira a tabela de símbolos do arquivo executável a.out .

Categorias
Compartilhe esse post

Posts populares

Linux Force Security Cursos de linux e segurança da informação

Seu futuro na tecnologia começa agora! Não deixe essa chance escapar.