Header Ads

Como usar o comando strings no Linux

Quer ver o texto dentro de um arquivo binário ou de dados? O comando strings do Linux extrai esses bits de texto - chamados de "strings" - para você.

O Linux está cheio de comandos que podem parecer soluções em busca de problemas . O comando das cordas definitivamente cai naquele acampamento. Apenas qual é o seu propósito? Existe um ponto para um comando que lista as sequências de impressão de dentro de um arquivo binário?

Vamos dar um passo para trás. Arquivos binários, como arquivos de programas, podem conter strings de texto legível por humanos. Mas como você consegue vê-los? Se você usa um gato ou menos, provavelmente acabará com uma janela de terminal suspensa. Programas que são projetados para trabalhar com arquivos de texto não funcionam bem se caracteres não imprimíveis forem alimentados através deles.

A maioria dos bytes dentro de um arquivo binário não é legível por humanos e não pode ser impressa no terminal janela de uma forma que faz algum sentido. Não há caracteres ou símbolos padrão para representar valores binários que não correspondem a caracteres alfanuméricos, pontuação ou espaço em branco. Coletivamente, esses são conhecidos como caracteres “imprimíveis”. Os demais são caracteres “não imprimíveis”.

Portanto, tentar visualizar ou pesquisar um arquivo binário ou de dados para cadeias de texto é um problema. E é aí que entram as strings. Ele extrai strings de caracteres imprimíveis de arquivos para que outros comandos possam usar as strings sem ter que lidar com caracteres não imprimíveis.

Usando o comando strings

Não há nada complicado sobre o comando strings, e seu uso básico é muito simples. Fornecemos o nome do arquivo que queremos que as strings pesquisem na linha de comando.

Aqui, vamos usar strings em um arquivo binário - um arquivo executável - chamado "jibber". Digamos strings, um espaço, "jibber" e, em seguida, pressione Enter.

[PRÉ] strings jibber

As strings são extraídas do arquivo e listadas no terminal window.

Definindo o Comprimento Mínimo da String

Por padrão, as strings procurarão por strings de quatro caracteres ou mais. Para definir um comprimento mínimo maior ou menor, use a opção -n (tamanho mínimo).

Observe que quanto menor o comprimento mínimo, maiores as chances de você ver mais lixo.

Alguns valores binários possuem o mesmo valor numérico que o valor que representa um caractere imprimível. Se dois desses valores numéricos estiverem lado a lado no arquivo e você especificar um comprimento mínimo de dois, esses bytes serão informados como se fossem uma string.

Para solicitar que as cadeias usem duas como Com o comprimento mínimo, use o comando a seguir.

[PRÉ] strings -n 2 jibber

Agora temos strings de duas letras incluídas nos resultados . Observe que os espaços são contados como um caractere imprimível.

Linhas de tubulação por menos

Por causa do tamanho da saída das strings, vamos para canalizá-lo através de menos. Podemos, então, percorrer o arquivo à procura de texto de interesse.

 strings jibber | less 

A listagem agora é apresentada para nós em menos, com o topo da listagem exibido primeiro.

Usando seqüências de caracteres com arquivos de objeto

Normalmente, os arquivos de código-fonte do programa são compilados em arquivos de objeto. Eles estão vinculados a arquivos de biblioteca para criar um arquivo executável binário. Temos o arquivo de objeto jibber à mão, então vamos dar uma olhada dentro desse arquivo. Observe a extensão de arquivo “.o”.

 jibber.o | less 

O primeiro conjunto de strings são todos agrupados na coluna oito se tiverem mais de oito caracteres. Se eles foram envolvidos, um caractere "H" está na coluna nove. Você pode reconhecer essas strings como instruções SQL.

A rolagem na saída revela que essa formatação não é usada em todo o arquivo.

É interessante ver as diferenças nas cadeias de texto entre o arquivo objeto e o executável finalizado.

Pesquisando em áreas específicas no arquivo

Programas compilados têm diferentes áreas dentro deles mesmos que são usados ​​para armazenar texto. Por padrão, as strings pesquisam o arquivo inteiro procurando por texto. Isto é como se você tivesse usado a opção -a (all). Para que as strings pesquisem somente em seções de dados carregadas e inicializadas no arquivo, use a opção -d (data).

 strings -d jibber | less 

A menos que você tenha um bom motivo, é melhor usar a configuração padrão e pesquisar o arquivo inteiro.

Imprimindo o deslocamento de string

Podemos ter seqüências de caracteres imprimir o deslocamento desde o início do arquivo em que cada seqüência está localizada. Para fazer isso, use a opção -o (deslocamento).

 strings -o parse_phrases | less 

O deslocamento é dado em Octal.

Para ter o deslocamento exibido em uma base numérica diferente, como como decimal ou hexadecimal, use a opção -t (radix). A opção radix deve ser seguida por d (decimal), x (hexadecimal) ou o (Octal). Usar -t o é o mesmo que usar -o.

 strings -t d parse_phrases | less 

Os deslocamentos agora são impressos em decimal.

 strings -t x parse_phrases | less 

Os deslocamentos agora são impressos em hexadecimal.

Incluindo espaço em branco

strings considera os caracteres tab e space para fazer parte das strings encontradas. Outros caracteres de espaço em branco, como novas linhas e retornos de carro, não são tratados como se fossem parte das seqüências de caracteres. A opção -w (espaço em branco) faz com que as strings tratem todos os caracteres em branco como se fossem partes da string.

 strings -w add_data | less 

Podemos ver a linha em branco na saída, que é um resultado do retorno (invisível) de carro e caracteres de nova linha no final da segunda linha.

Não estamos limitados a arquivos

Podemos usar strings com qualquer coisa que seja ou que possa produzir um fluxo de bytes.

Com este comando, podemos olhar através da memória de acesso aleatório (RAM) do nosso computador.

Precisamos usar o sudo porque estamos acessando / dev / mem. Este é um arquivo de dispositivo de caracteres que contém uma imagem da memória principal do seu computador.

 sudo strings / dev / mem | less 

A listagem não é todo o conteúdo da sua RAM. São apenas as strings que podem ser extraídas dele.

RELACIONADO: O que significa “Tudo é um arquivo” no Linux?

Searching Many Arquivos ao mesmo tempo

Caracteres curinga podem ser usados ​​para selecionar grupos de arquivos a serem pesquisados. O caractere * representa vários caracteres e o caractere? caractere representa qualquer caractere único. Você também pode optar por fornecer vários nomes de arquivos na linha de comando.

Vamos usar um curinga e pesquisar todos os arquivos executáveis ​​no diretório / bin. Como a listagem conterá resultados de muitos arquivos, usaremos a opção -f (filename). Isso imprimirá o nome do arquivo no início de cada linha. Podemos então ver em qual arquivo cada string foi encontrada.

Estamos colocando os resultados no grep e procurando por strings que contenham a palavra "Copyright".

 strings -f / bin / * | grep Copyright 

Recebemos uma lista ordenada das declarações de direitos autorais de cada arquivo no diretório / bin, com o nome do arquivo no início de cada linha.

sequências de caracteres desvendadas

Não há mistério para sequências de caracteres; é um comando típico do Linux. Ele faz algo muito específico e faz isso muito bem.

É outra das engrenagens do Linux e realmente ganha vida quando está trabalhando com outros comandos. Quando você vê como ele pode ficar entre arquivos binários e outras ferramentas como o grep, você começa a apreciar a funcionalidade desse comando um pouco obscuro.

LEIA PRÓXIMO & rsaquo; Como verificar e reforçar todas as configurações de privacidade do seu iPhone e rsaquo; Como usar o comando ar do Linux para criar bibliotecas estáticas & rsaquo; O que é um pecado profundo e devo me preocupar? & Rsaquo; Como funcionam os testes de velocidade da Internet? (e quão precisos são eles?) & rsaquo; Como verificar a força do seu sinal Wi-Fi

Via: How to Geek

Nenhum comentário