Artigo: 164151 - Última revisão: sexta-feira, 26 de Outubro de 2007 - Revisão: 3.1

Como comparar imagens binárias do mesmo projecto 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 | Reduzir tudo

Sumário

Por vezes, poderá ter de comparar as compilação imagens (EXE, DLL, etc.) do mesmo projecto criadas em alturas diferentes. Uma vez que as imagens contêm carimbos de data e hora, uma comparação de ficheiros simples comunica as diferenças entre as imagens. Pode utilizar o utilitário DUMPBIN para gerar a comparação de ficheiro correcto.

Mais Informação

Os carimbos de data e hora podem ser removidos da imagem incorporada sem remover as informações relevantes (código e dados), utilizando o /RAWDATA mudar disponível no utilitário DUMPBIN. Em seguida, pode ser utilizado qualquer utilitário de comparação de ficheiros em DUMPBIN saída da seguinte forma:
   DUMPBIN  /RAWDATA  MyApp.EXE > first.txt
				
se por MyApp.exe baseia-se novamente noutra altura, em seguida, utilizar DUMPBIN da seguinte forma:
   DUMPBIN  /RAWDATA  MyApp.EXE > second.txt
				
agora é possível comparar first.txt e second.txt utilizando um ficheiro comparar utilitário como:
       FC /B first.txt second.txt
				
executar DUMPBIN no directório residente da imagem. O procedimento acima aplica-se para a compilação versão só porque o Debug criar registos o carimbo de data e hora em imagens (independentemente da /Zi ou /Z7) e DUMPBIN não remover estas informações. Se as macros predefinidas __DATE__ e __TIME__ forem utilizados na origem, o carimbo de data e hora registado nas imagens não será removido por DUMPBIN para a compilação de versão. Nestas circunstâncias, poderá utilizar o parâmetro /DISASM. No entanto, o parâmetro /DISASM remove a hora e carimbo de data, bem como os dados inicializados. Isto significa que não obterá uma comparação de imagem true.

Nota : é garantido que o Visual C++ irá gerar a mesma imagem binária durante a criação mesmos ficheiros de origem no compilações sucessivas. No entanto, é garantido que EXE ou (DLL) funcionarão exactamente da mesma forma em execução, todas as outras coisas que ser igual. Compilar e opções de ligação e ligar uma função em se duas imagens binárias vão comparar igualmente a ordem de reprodução.

Se seguir os procedimentos descritos acima e as duas imagens comparar igualmente, as imagens são iguais. Se as duas imagens não são igualmente comparar, em seguida, ainda existe incerteza como a se as imagens são iguais ou não.

A secção de recursos do executável contém carimbos de data/hora. Na secção recursos do executável, existe um cabeçalho para cada tipo de recurso (por exemplo, tabela de cadeia, diálogo, ícone). Cada um destes cabeçalhos contém um carimbo de data/hora.

Utilize o Microsoft Portable executável e comum objecto ficheiro de formato especificação a partir da MSDN Library para alterar as marcas de data/hora, de modo a que o podem não ser um factor na comparação ou ignorar a secção de recursos na comparação.

Para identificar a secção que contém as diferenças, execute o utilitário WinDiff enviados com o Visual C++:
   WINDIFF first.txt second.txt
				
a secção que contém as diferenças será iniciado com uma linha semelhante à seguinte (Embora o número pode ser diferente):
   RAW DATA #5
				
em seguida, comparar isto com o resultado do seguinte:
   dumpbin /headers MyApp.exe
				
deverá encontrar um cabeçalho que começa com o seguinte:
   SECTION HEADER #5
      .rsrc name
				
uma vez que o número da secção corresponde a secção com as diferenças nos dados não processados (neste exemplo, o número da secção é 5), em seguida, ocorrem as diferenças na secção denominada ".rsrc". Este é o nome da secção de recursos.

A tabela de exportação do tem um carimbo de data/hora bem. Isto normalmente está localizado na secção .rdata (Visual C++ 4.2 e posteriores) ou a secção .edata (anteriores ao Visual C++ 4.2). Esta tabela existe apenas se exportar símbolos a partir da imagem PE.

Importar do tabela também tem um carimbo de data/hora. Isto está normalmente localizado na secção .idata. Uma destas tabelas existir para cada DLL a que a imagem se refere. Este carimbo de data/hora é zero, a menos que a imagem está ligada. Depois da imagem for dependente, o carimbo de data/hora é definido para o carimbo de data/hora da DLL de onde os símbolos são importados.

Mais uma vez, consulte a Microsoft Portable executável e comum objecto ficheiro Formatar especificação na MSDN Library para obter informações sobre como localizar as informações de data/hora numa 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )