ID do artigo: 164151 - Última revisão: sexta-feira, 26 de outubro de 2007 - Revisão: 3.1

Como comparar imagens binárias do projeto mesmo cria

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Às vezes, talvez você precise comparar compilação imagens (EXE, DLL, etc.) de projeto mesmo que foram criadas em momentos diferentes. Como as imagens contêm carimbos de data e hora, uma comparação de arquivo simples relata as diferenças entre as imagens. Você pode usar o utilitário DUMPBIN para gerar de comparação de arquivo correto.

Mais Informações

Os carimbos de data e hora podem ser removidos da imagem interna sem remover as informações relevantes (código e dados) usando o /RAWDATA alternar disponíveis no utilitário DUMPBIN. Em seguida, pode ser usado qualquer utilitário de comparar arquivos em DUMPBIN saída da seguinte maneira:
   DUMPBIN  /RAWDATA  MyApp.EXE > first.txt
				
se MyApp.exe baseia-se novamente em um horário diferente, em seguida, use DUMPBIN da seguinte maneira:
   DUMPBIN  /RAWDATA  MyApp.EXE > second.txt
				
agora você pode comparar first.txt e second.txt usando um arquivo comparar utilitário como:
       FC /B first.txt second.txt
				
executar DUMPBIN no diretório residente da imagem. O procedimento acima aplica-se para a compilação de versão só porque a depuração criar registros o carimbo de data e hora em que as imagens (independentemente da /ZI ou/Z7) e DUMPBIN não remove essas informações. Se o __DATE__ macros predefinidos e __TIME__ forem usados na fonte, o carimbo de data e hora registrado nas imagens não será removido por DUMPBIN para a compilação de versão. Sob essas circunstâncias, você pode usar a opção /DISASM. No entanto, a opção /DISASM removerá o tempo e carimbo de data, bem como dados inicializados. Isso significa que você não terá uma comparação de imagem true.

Observação : não há nenhuma garantia de que o Visual C++ irá gerar a mesma imagem binária ao criar os mesmos arquivos fonte em compilações sucessivas. No entanto, você é garantido que o EXE (ou DLL) irão se comportar exatamente da mesma maneira em execução, outros tudo sendo igual. Compilar e vincular opções e vincular uma função em imagens binárias dois irão comparar igualmente a ordem de reprodução.

Se você siga os procedimentos descritos acima e comparar as duas imagens igualmente, as imagens são os mesmos. Se as duas imagens não comparar igualmente, em seguida, ainda há incertezas quanto ao se as imagens são os mesmos ou não.

A seção de recurso do executável contém carimbos de data/hora. Na seção de recurso do executável, há um cabeçalho para cada tipo de recurso (por exemplo, tabela de seqüência de caracteres, diálogo, ícone). Cada um desses cabeçalhos contém um carimbo de data/hora.

Use o executável portátil da Microsoft e a especificação de formato de arquivo objeto comum da biblioteca MSDN para alterar os carimbos de data/hora para que eles não ser um fator na comparação ou ignorar a seção de recursos na comparação.

Para identificar a seção que contém as diferenças, execute o utilitário WinDiff fornecido com o Visual C++:
   WINDIFF first.txt second.txt
				
a seção que contém as diferenças será iniciado com uma linha similar à seguinte (Embora o número pode ser diferente):
   RAW DATA #5
				
E, compare isso com a saída do seguinte:
   dumpbin /headers MyApp.exe
				
você deve encontrar um cabeçalho que começa com o seguinte:
   SECTION HEADER #5
      .rsrc name
				
como o número da seção coincide com a seção com as diferenças entre os dados brutos (neste exemplo, o número de seção é 5), e as diferenças ocorrem na seção chamada ".rsrc". Isso é o nome da seção de recursos.

A tabela de Directory exportar tem também um carimbo de data/hora. Isso normalmente está localizado na seção .RDATA (Visual C++ 4.2 e posterior) ou na seção .edata (anteriores ao Visual C++ 4.2). Esta tabela existe somente se você exportar símbolos de imagem do PE.

A tabela de diretório de importação também tem um carimbo de data/hora. Isso normalmente está localizado na seção .idata. Existe uma dessas tabelas para cada DLL ao qual a imagem se refere. Esse carimbo de data/hora é zero, a menos que a imagem está vinculada. Depois que a imagem estiver acoplada, o carimbo de data/hora é definido como o carimbo de data/hora da DLL de onde os símbolos são importados.

Novamente, consulte o executável portátil da Microsoft e o Common Object arquivo formato Specification na biblioteca MSDN para obter informações sobre como localizar as informações de data/hora em uma imagem.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbmt kbproductlink kbarttypeinf kbhowto KB164151 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 164151  (http://support.microsoft.com/kb/164151/en-us/ )