O que um CHM realmente é
Um .chm é um pequeno sistema de arquivos. A Microsoft o chamou de ITSS: um cabeçalho, um diretório de entradas e uma ou duas seções de conteúdo — a seção 0 armazenada em claro e a seção 1 comprimida com LZX. Dentro há páginas HTML comuns, folhas de estilo e imagens, além de alguns fluxos de metadados cujos nomes começam com # ou $.
Dois desses fluxos importam aqui. O #SYSTEM guarda o título do arquivo de ajuda e seu tópico padrão — a página que um visualizador deveria abrir primeiro. Sem ele, um leitor precisa adivinhar, e adivinhar em ordem alfabética costuma parar numa folha de estilo. O arquivo .hhc é a árvore de conteúdo, escrita como um mapa do site em HTML com <UL> e <LI> aninhados e entradas <OBJECT type="text/sitemap"> dentro.
Arquivos .hhc reais são famosos por serem malformados — itens de lista sem fechar por toda parte — então são analisados com o próprio analisador HTML do navegador, que se recupera disso do mesmo jeito que o visualizador de ajuda original fazia. Um analisador XML simplesmente recusaria o arquivo.
Ler uma página
As folhas de estilo e as imagens de cada página são resolvidas contra o caminho daquela página dentro do arquivo de ajuda e substituídas pelos bytes do próprio CHM. Os links entre tópicos funcionam: a página é exibida num iframe de mesma origem mas sem allow-scripts, então nada nela pode ser executado, enquanto a própria ferramenta consegue interceptar um clique e navegar até o tópico ligado. Um link que aponte para a internet não é seguido, e uma política injetada de default-src 'none' impede que ele seja buscado até por acidente.
Sobre a compressão, com franqueza
A ferramenta informa o que o arquivo usa: LZX com seu tamanho de janela e sua contagem de blocos de reinício, ou nada, se tudo estiver na seção armazenada.
O decodificador LZX aqui foi escrito a partir da especificação [MS-PATCH] e do lzxd.c do libmspack. Seu leitor de fluxo de bits, a decodificação Huffman canônica, os blocos não comprimidos e o filtro x86 têm testes unitários. A decodificação de blocos verbatim e aligned nunca foi executada contra um arquivo produzido pelo compressor da própria Microsoft, porque não havia corpus offline para testar.
Então, se uma página não descompacta, esta ferramenta mostra o erro específico e se recusa a renderizar qualquer coisa. Ela não coloca os bytes recuperados na tela. Lixo que parece uma página é pior do que uma falha honesta, porque não dá para distinguir. Se um arquivo de ajuda real falhar aqui, vale reportar — o defeito é nosso.
Também disponível
Cada página listada com seu tamanho e a seção em que vive, o compilador que gerou o arquivo e os detalhes do diretório ITSS. Para tirar os arquivos em vez de lê-los, use o Extrator CHM.
Privacidade
O arquivo de ajuda é aberto no seu navegador e nunca é enviado.
Tiny Online Tools







