Significado de remendar arquivos binários?

7

Estou tentando entender o que significa remendar arquivos binários em um exemplo da página de manual xxd :

Patch the date in the file xxd.1
% echo "0000037: 3574 68" | xxd -r - xxd.1
% xxd -s 0x36 -l 13 -c 13 xxd.1
0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996
  1. Significa editar arquivos binários ou é como em Wikipedia

    A patch is a piece of software designed to fix problems1 with, or update a computer program or its supporting data.

  2. Como xxd e patch diferem e são semelhantes?
  3. O que o exemplo tenta fazer?
por Tim 28.07.2011 / 20:53

3 respostas

12

Para corrigir um arquivo significa modificá-lo, com a conotação de que a modificação é geralmente pequena. O uso vem do uso geral de inglês, onde um patch é uma pequena modificação (para um pedaço de pano, por exemplo). Quando se trata de arquivos, um patch nem sempre é um reparo.

Um patch é uma série de instruções que descrevem como modificar um arquivo ou um conjunto de arquivos. No mundo unix, um patch geralmente é a saída do comando diff , descrevendo as alterações em um arquivo de texto. Um patch neste sentido descreve as modificações em termos de adição, remoção ou modificação de linhas nos arquivos. O utilitário patch aplica essas instruções para modificar um arquivo ou conjunto de arquivos. Ele tenta ser inteligente ao aplicar vários patches ao mesmo arquivo, já que o primeiro patch pode causar alterações que impedem que o segundo seja aplicado, porque o arquivo não está mais no estado esperado. Como diff e patch baseiam strongmente sua operação em linhas, eles não são adequados para arquivos binários.

xxd é um utilitário genérico para trabalhar com arquivos binários. Uma de suas capacidades é fazer modificações em um arquivo. Por exemplo, o comando xxd -r - xxd.1 significa aplicar as modificações descritas na entrada padrão. O patch de exemplo (ou seja, as instruções de modificação) 0000037: 3574 68 mean: iniciando no offset 0x37 (que é 55 em decimal), substitua os próximos três bytes por 0x35, 0x74 e 0x68 (ou seja, os três caracteres 5th ). p>     

por 28.07.2011 / 23:19
4

Quando você aplica um patch a um arquivo, sobrescreve parte dele com dados atualizados (um patch também pode colocar dados adicionais no final). Você pode corrigir qualquer tipo de arquivo, seja texto, binário ou qualquer outra coisa, porque todos os arquivos são fluxos de bytes quando se trata dele.

As partes que devem ser sobrescritas são especificadas no arquivo de correção.

Se uma correção de software envolve a atualização de um arquivo, um patch pode modificar o arquivo para ser o mesmo que uma versão completa de um arquivo atualizado. Como os patches não são o arquivo completo, mas apenas as diferenças, os patches serão menores, consumirão menos espaço em disco e consumirão menos largura de banda quando forem baixados.

A edição direta de um arquivo binário em um editor hexadecimal (como hexer ) às vezes é chamada de correção "manual".

Eu não estou familiarizado com xxd , mas parece que da pesquisa preliminar que xxd pode gerar um dump ou listagem hexadecimal de dados binários, e também pode converter tal listagem de volta em binário direto. Assim, você pode despejar o hexadecimal com xxd , editá-lo com vim ou outro editor de texto e gravar as alterações novamente com xxd -r . Você também pode canalizar uma string usando echo em xxd "formato hexdump". (Outras opções permitem que você faça alterações no arquivo binário. Parece que xxd tem muitas opções que permitem especificar onde começar e parar de sobrescrever ou aplicar patches.)

O primeiro comando no exemplo é basicamente informando xxd para alterar os bytes no arquivo xxd.1 iniciando no deslocamento 0x0000037 para 0x35 0x74 0x68 (ASCII para "5"). xxd pode ler seu próprio formato "hexdump" e é isso que o comando "echo" está fornecendo para xxd .

O segundo comando no exemplo é descarregar uma contagem ( -c ) de 13 bytes no arquivo, iniciando no mesmo deslocamento.

O comando patch faz uma coisa semelhante, mas quer arquivos em um formato "diff". Você pode fazer um arquivo diff salvando a saída do comando diff , que irá comparar dois arquivos e expressar as diferenças no formato do diff. A partir da leitura da página man , parece que o patch se destina mais a alterar arquivos de texto do que o binário simples.

    
por 28.07.2011 / 21:27
2

Nos microcontroladores, você às vezes tem programas que alteram a memória do programa, ou seja, o próprio programa. Você poderia dizer que o programa "sofre mutação" quando é executado.

Esta é apenas uma explicação para alterar aplicativos binários.

Na verdade, você usa patches binários com bastante frequência em programas de microcontroladores. Como o seu programa é código de máquina e, na maioria das vezes, você está programando em assembler, o código de máquina montado é uma representação bastante direta do que você está programando. Então, uma vez que seu código é montado, você simplesmente fornece patches para algumas ou todas as memórias do programa do microcontrolador.

    
por 28.07.2011 / 23:34

Tags