Por que um exe não funciona depois de copiá-lo?

0

Eu estava entediado e decidi experimentar este experimento:

Eu mudei a extensão de um exe para txt e copiei o conteúdo. Tudo estava confuso com símbolos aleatórios. Eu então copiei para outro arquivo txt e mudei o nome para um exe . Na execução desse exe eu consegui:

Os tamanhos para o exe original e o exe copiado eram os mesmos . Então, por que isso não funciona? Há uma explicação para isso? E existe uma maneira melhor (convertendo-a em texto primeiro)?

Espero que faça sentido?

    
por E2Busy 11.09.2016 / 20:29

2 respostas

2

Picar qualquer dados binários através de um editor de texto aleatório irá resultar em alterações indefinidas e potencialmente prejudiciais ao arquivo, semelhante ao uso do modo de transferência FTP "text" para transferir um arquivo binário.

Por O que é o formato ANSI?

Use of the top-bit-set characters is not defined in ASCII/ANSI as it is a 7-bit character set.

Portanto, se você estiver usando um editor de texto ANSI, provavelmente estará removendo o bit superior de cada byte e corrompendo o arquivo. Você terá o mesmo número de bytes e, portanto, o tamanho do arquivo será o mesmo, mas você perderá 1/8 dos dados necessários para o executável funcionar.

Editores de texto mais inteligentes podem manter todos os dados contanto que você salve como algo como UTF-8 (sem BOM), mas sem experimentar eu não confiaria nele para dados binários.

É muito mais fácil copiar e colar o arquivo de maneira apropriada usando a rotina de cópia do Explorer (ou equivalente), pois será uma cópia exata em vez de ser texto por texto. editor.

    
por 11.09.2016 / 20:49
1

O problema mais provável é que o editor de texto que você usou estragou os caracteres não imprimíveis, estragou os finais da linha ou ambos.

Caracteres não imprimíveis: Os conjuntos de caracteres ASCII (e Unicode) definem mapeamentos de números (agrupamentos de dados binários) para caracteres. (Na verdade, existem muitos conjuntos de caracteres, mas UTF-8 e UTF-16 são provavelmente os mais comuns, e ambos são, em certa medida, baseados em ASCII; assim como a maioria dos outros.) personagens "reais". Alguns desses são caracteres de "controle" destinados a serem usados em coisas como máquinas teletipo remotas realmente antigas. Alguns são coisas estranhas, como o caractere "bell" (que faz um sinal sonoro se você imprimi-lo no console). Há também o caractere NULL (armazenado como 0, todos os bits não definidos) que é usado para indicar o fim de uma string (blob de texto) em muitas linguagens de programação; editores de texto tendem a não lidar com isso normalmente, mas eles aparecerão em um arquivo executável.

De qualquer forma, um editor de texto não saberá como representá-los. Ele pode apenas mostrá-los como quadrados ou algo assim, mas quando você copiá-los, ele pode copiar os caracteres como quadrados, e não como seus códigos de caracteres subjacentes. Ou quando você colá-lo, pode fazer algo semelhante. Como os arquivos EXE são compostos de código de máquina (dados binários, que não devem ser representados como texto), ele conterá vários desses caracteres não imprimíveis.

Endings de linha: Existem dois caracteres que são (às vezes) usados para fins de linha na maioria dos conjuntos de caracteres. Estes são o retorno de carro (em um antigo teletipo, isso significava "mover a cabeça de impressão de volta para a borda esquerda") e o avanço de linha (avançar para a próxima linha abaixo) na página). Veja Wikipedia . O Windows usa os dois, geralmente emparelhados; Se uma linha não terminar em um CRLF, alguns editores pensarão que a linha não terminou e apenas colocarão um caractere invisível (você irá "percorrê-la" se estiver usando as teclas de seta para mover para a esquerda / direito, o cursor aparecerá para não se mover). Outros editores tratarão o CRLF, LF sozinho ou até mesmo o CR sozinho (embora nada desde o MacOS clássico tenha usado essa terminação de linha) todos como finais de linha válidos.

O problema surge quando você copia e cola algo com finais de linha inconsistentes. Muitos editores de texto são "inteligentes" o suficiente para "consertar" seus finais de linha. Em um sistema Windows, isso provavelmente significa converter todos os LFs solo, e provavelmente também solo CR, em combos CRLF. Isso está adicionando novos dados no EXE, o que obviamente altera o significado do código da máquina.

Como diz o comentário do Ramhound, se você quiser copiar e colar o conteúdo de um EXE (ou qualquer outro arquivo binário que não seja texto), você precisa usar um editor binário (a maioria deles é geralmente chamada hex editores , porque representam cada byte no arquivo como um valor hexadecimal, de 00 a FF, embora também decodifiquem os que podem ser impressos em texto para você). Editores binários não vão perder personagens não imprimíveis, ou tentar "consertar" seus finais de linha, ou qualquer outra coisa assim.

    
por 11.09.2016 / 20:50