O Internet Explorer executou uma operação ilegal e será fechado


Por: Yuri Diógenes


 


1. Introdução


 


Antes de começar o assunto (tecnicamente falando), gostaria de voltar ao tempo e lembrar quando tínhamos o MS-DOS e o Windows 3.1. Nessa época que ainda nem existia o Internet Explorer você lembra o que acontecia com o seu “ambiente operacional” Windows 3.1 quando a mensagem “seu programa executou uma operação ilegal e será fechado” aparecia? Bem, se você não lembra porque esqueceu ou porque nunca trabalhou com o Windows 3.1 então vou lhe contar. O que acontecia era que saíamos do ambiente gráfico Windows 3.1 e retornávamos para o prompt de comandos do DOS (sistema operacional).


 


Tal comportamento acontecia porque tanto o ambiente gráfico Windows 3.1 quanto o programa que estava em execução (por exemplo o Word for Windows 2.0) compartilhavam o mesmo espaço de endereçamento, então quando um processo causava uma exceção não prevista no código, todo aquele espaço de endereçamento era afetado. Todo o ambiente operacional Windows 3.1 rodava no modo usuário, enquanto o sistema operacional de fato (DOS) tinha instruções no modo Kernel.


 


A partir do Windows 95 o sistema operacional já não era mais o DOS então tínhamos um único sistema separado em modo usuário e modo Kernel, onde o que estava em modo usuário não poderia afetar o modo Kernel. Neste modelo já tínhamos o conceito de que processos de 32 bits rodavam em um espaço de endereçamento próprio e com isso um processo não poderia afetar o outro processo. Então quando ocorre uma exceção, apenas aquele processo é afetado.


 


Toda essa nostalgia é para entender que hoje os problemas desta natureza foram reduzidos drasticamente, porém ainda existem cenários em que exceções existem e que o aplicativo precisa ser fechado. Este artigo tem como intuito mostrar um cenário que vem acontecendo com certa  freqüência para usuários do Internet Explorer 6 ou 7. Tenho notado maior freqüência destes chamados  entre clientes do Brasil e na maioria usuários de online banking.


 


2. Cenário


 


Nestes casos que trabalhei e em outros que acompanhei o comportamento não era muito consistente, porém podemos enumerar alguns dos principais sintomas:


 


·         O usuário está navegando em uma página Web qualquer e o Internet Explorer para de responder. Ao abrir o gerenciador de tarefas o processo aparece como “Not Responding” e o usuário tem que matar o processo;


·         O usuário está navegando em uma página Web qualquer e o Internet Explorer gera um crash e fecha automaticamente;


·         Ao tentar imprimir uma página web o Internet Explorer gera um crash e fecha automaticamente;


 


Lembre-se que tais sintomas podem ser causados por diversos componentes, então as seções a seguir irão lhe guiar para uma técnica de resolução de problemas focada em  isolar o problema e em seguida seremos mais específicos nos cenários.


 


3. Como Iniciar a Resolução do Problema?


 


No caso de estar utilizando o Internet Explorer 7, a melhor forma de isolar o problema é usando a versão do IE7 que vem sem nenhum “plug in/add on” de terceiros instalado. Para acessar essa versão basta ir em Iniciar / Programas / Acessórios / Ferramentas de Sistemas e lá você terá o Internet Explorer sem aditivos.


 


Para Internet Explorer 6 ou inferior é necessário usar as seguintes opções para obter o mesmo resultado:


 


1. Clique em Ferramentas / Opções da Internet / Programas e clique no botão Gerenciar Complementos;


2. Selecione os complementos (add on) de terceiros e clique na opção desativar;


3. Clique em OK;


4. Agora clique na guia Avançadas e desabilite a opção “Ativar extensões de navegador de terceiros”;


5. Clique em OK.


 


Com estes passos tanto para IE7 quanto para IE6 estamos eliminando a possibilidade de haver componentes de terceiros que estejam influenciando na correta operação do Internet Explorer.


 


 


4. E depois?


 


Se o problema resolver após isso então temos um grande indício de que um componente de terceiro estava causando o problema, agora qual? Bem, para identificar qual componente está causando o problema  podem ser usados os seguintes métodos:


 


·         Coleta de um dump no momento do “crash”;


·         Habilitar manualmente cada “add on” no gerenciador de complementos do IE e verificar qual deles causa o travamento;


 


OBS: Para mais informações de como coletar dumps de um processo, leia o artigo do colega Roberto Farah, Como (Rapidamente) Usar O Debugdiag.


 


 


5. Resultado


 


Neste casos em que trabalhei o dump revelou qual componente estava na pilha de execução durante o problema. Neste caso o componente de terceiro era o arquivo gbieh.dll, e na ocasião também pude observar o mesmo comportamento usando o utilitário Process Explorer da Sysinternals (que agora é da Microsoft). Ao navegar no site deste banco e tentar fazer acesso ao recurso de “online banking” a seguinte pilha de instruções é observada no processo iexplorer.exe:


 



 


 


Não é uma regra geral dizer que o Internet Explorer vai causar um crash sempre que esta DLL está sendo carregada, porém existem violações de acesso que acontecem nesta DLL que podem causar tal comportamento no IE, e como não temos o código da DLL não dá para saber que cenários seriam estes. O exemplo da pilha de execução acima foi durante uma navegação no site do banco onde o problema não se manifestou. Abaixo temos o exemplo de uma pilha de instruções onde o problema ocorreu:


 


 



ChildEBP RetAddr 


0012d99c 7c9551ad ntdll!DbgBreakPoint


0012d9b4 7c969c2f ntdll!RtlApplicationVerifierStop+0x160


0012da30 7c96ac57 ntdll!RtlpDphReportCorruptedBlock+0x22d


0012da54 7c96ae5a ntdll!RtlpDphNormalHeapFree+0x2e


0012daa4 7c96defb ntdll!RtlpDebugPageHeapFree+0x79


0012db18 7c94a5d0 ntdll!RtlDebugFreeHeap+0x2c


0012dc00 7c9268ad ntdll!RtlFreeHeapSlowly+0x37


0012dcd0 77c0c2de ntdll!RtlFreeHeap+0xf9


0012dd18 02482619 msvcrt!free+0xc3


0012dd4c 0248306e gbiehabn!Gbieh+0xa265


0012df58 02482713 gbiehabn!Gbieh+0xacba


0012df8c 024721d9 gbiehabn!Gbieh+0xa35f


0012e198 02471b6a gbiehabn+0x121d9


0012e1a8 77ec2499 gbiehabn+0x11b6a


0012e1dc 77eb31b2 shlwapi!EnumInvokeCallback+0x3e



0012eb50 77d28a10 user32!DispatchMessageWorker+0x306


0012eb60 75f76d95 user32!DispatchMessageW+0xf


0012eb78 75f7e692 browseui!TimedDispatchMessage+0x33


0012edd8 75f7e805 browseui!BrowserThreadProc+0x32e


0012ee6c 75f7eacd browseui!BrowserProtectedThreadProc+0x50


0012fef0 777c7216 browseui!SHOpenFolderWindow+0x22c


0012ff10 00402372 shdocvw!IEWinMain+0x129


0012ff60 00402444 iexplore!WinMainT+0x2de


0012ffc0 7c816d4f iexplore!_ModuleEntry+0x99


0012fff0 00000000 kernel32!BaseProcessStart+0x23


 


Neste caso acima a DLL causou uma corrupção do heap e causou um crash no processo iexplorer.exe.  Para mais informações sobre corrupção de Heap e como fazer o “troubleshooting”, veja o artigo How to use Pageheap.exe in Windows XP and Windows 2000.


 


Procurando no Windows Live Search foi possível encontrar mais informações sobre este arquivo, alguns sites o categorizam como um malware porém o fato é que ele é instalado ao navegar no site de um banco no Brasil.


 


Quando se navega no site deste banco, é pedido para instalar um controle para acesso a recursos do site. Durante a instalação do controle a tela abaixo é mostrada:


 


 


 


Após isso uma outra tela é aberta pedindo para instalar o controle, neste momento alguns arquivos são descarregados para a pasta “C:\windows\downloaded program files”, estes arquivos são usados durante o processo de acesso ao site.  Vejamos o resultado do comando DIR GB* nesta pasta:


 


 



C:\WINDOWS\Downloaded Program Files>dir gb*


 O volume na unidade C não tem nome.


 O número de série do volume é 705D-B7A4


 


 Pasta de C:\WINDOWS\Downloaded Program Files


 


09/11/2006  15:33           226.344 gbieh.dll


03/10/2006  09:49            86.056 gbpdist.dll


26/09/2006  09:54               252 gbpdist.inf


               3 arquivo(s)        312.652 bytes


               0 pasta(s) 14.519.418.880 bytes disponíveis


 


Trabalhei em muitos chamados originados com os sintomas descritos na sessão 2 deste artigo e a solução de contorno para os casos envolvendo esta DLL era retirá-la do sistema.


 


 


6. Tentei remover a DLL e não consigo, e agora?


 


Na grande maioria dos cenários com esta DLL o problema de não conseguir removê-la ocorre porque existem “handles” de outros processos para esta DLL. Felizmente, com o uso desta mesma ferramenta (Process Explorer) é possível verificar quais os processos que estão acessando esta DLL, vejamos como:


 


1. Na tela principal do Process Explorer, clique no menu “Find” e depois na opção “Find Handle”;


2. Na janela que aparece, digite o nome da DLL e clique em “Search”;


3. É possível que o resultado seja semelhante ao mostrado abaixo:


 


 


 


Note que na parte inferior da tela aparece o nome e a descrição do módulo. Veja na janela de “Search” que vários processos estão usando esta DLL. Para excluí-la é necessário primeiramente “matar” o processo que tem o “handle” aberto com a DLL. Note que o processo explorer.exe está usando esta DLL, então é necessário terminá-lo e com isso o “shell” do Windows será terminado, por isso você pode tanto ativar o Task Manager e chamar o prompt de comandos ou antes de terminá-lo deixe uma janela com o prompt de comandos aberta, para que após o shell ser encerrado você possa navegar via linha de comando para a pasta e excluir o arquivo.


 


Em alguns cenários mais raros, mesmo após matar os processos ainda recebemos uma mensagem dizendo que não é possível excluir este arquivo. Para estes cenários é necessário entrar no modo de segurança e então excluir o arquivo.


 


7. Conclusão


 


O principal objetivo deste artigo é mostrar uma solução de contorno quando temos complementos (add ons) no Internet Explorer que podem causar um “crash” do programa durante a navegação em um web site. Usei esta DLL como exemplo devido a volume de chamados que em que trabalhei onde foi identificado que a causa era este arquivo. É sempre bom salientar que a solução de contorno demonstrada aqui é apenas algo que isola o problema e permite que você continue trabalhando. Quando isso acontece é importante contactar o fabricante do complemento (add on) e verificar se há uma atualização do arquivo ou se há alguma solução definitiva para o problema.


Comments (20)

  1. Anonymous says:

    Olá Rafael,

    Primeiramente obrigado pela visita e pelos comentários. O sistema operacional em uso era o Windows XP (com ou sem SP2). As páginas que estavam sendo visitadas podem ser as citadas por você ou também outros sites, o fato é que observou-se que a DLL era carregada e executada em outras situações mesmo quando o usuário não estava diretamente acessando o site do banco.

    Quanto a instalação do "plug in", na realidade não, na realidade o "plug in" já estava instalado nos cenários que trabalhei. O erro não ocorreu durante a instalação e sim durante a execução de instruções da DLL.

    Quanto a ter mais de uma janela aberta a resposta é: nem sempre, os erros se manifestaram em cenários diferentes.

    Quanto ao fornecimento do dump não será possível pois o mesmo é um dump de cliente Microsoft e as informações são sigilosas.

    Espero que você consiga fazer a simulação e ter sucesso na resolução.

    Obrigado mais uma vez pela visita.

    Yuri Diógenes

  2. Anonymous says:

    Olá Marco,

    Obrigado pela visita. Segue abaixo um link para algumas opções disponíveis no IE7:

    http://www.microsoft.com/windows/products/winfamily/ie/quickref.mspx?wt_svl=20318a&mg_id=20318b

  3. Anonymous says:

    Olá Ronaldo,

    Parabéns pelo artigo, li e ficou muito bom. Obrigado por fazer referência ao nosso Blog.

    Yuri Diógenes

  4. Anonymous says:

    Obrigado pela visita e pelo suporte ao nosso Blog.

  5. Anonymous says:

    Olá Carlos,

    Como descrito neste artigo existem duas formas de tentar isolar este problema:

    – Iniciar o Internet Explorer sem Plug-Ins de terceiros;

    – Iniciar o Windows em Modo de Segurança e deletar esta DLL.

    O artigo acima explica o passo a passo de como fazer.

    Como trata-se de uma DLL de terceiros, caso o método acima não funcione é necessário endereçar o problema com o fabricante da DLL.

    Obrigado pela visita.

    Yuri Diógenes

  6. Anonymous says:

    Olá Ronaldo,

    Obrigado pela visita e pelo feedback. Fico feliz em saber que o artigo será referenciado em uma publicação sua sobre Process Explorer.

    Obrigado,

    Yuri Diógenes

  7. Anonymous says:

    Neste caso minha sugestão é você usar o utilitário DebugDiag para tentar isolar o que está causando o "crash" do IE. Veja o artigo do Roberto Farah que trata do uso desta ferramenta:

    http://blogs.technet.com/latam/archive/2006/04/21/como-rapidamente-usar-o-debugdiag.aspx

    Grato,

    Yuri Diógenes

  8. Anonymous says:

    Olá Eder,

    Primeiramente obrigado pela visita. Quanto ao comportamento do IE7 na realidade ele não é o mesmo do Win3.1, pois no caso do Win3.1 não só o processo que travava era comprometido (como no exemplo o winword.exe) como todo o ambiente operacional.

    No IE7 o recurso de navagação com as TABS é apenas para facilitar o manuseio de novas janelas, porém todas as TABS de uma janela estão sendo executadas dentro da mesma instância do processo iexplorer.exe.

    Quando você cria uma nova TAB o IE7 faz uma chamada para funções contidas no arquivo ieframe.dll para criar uma nova TAB, mas tudo isso acontece dentro do mesmo processo (iexplorer.exe). Então é normal que caso o processo principal sofra um problema de execução na pilha, todas as TABS sejam comprometidas.

    Faça um teste usando o Process Explorer:

    1. Abra o Process Explorer

    2. Abra o IE7

    3. Veja o processo que foi criado para o iexplorer.exe. Clique com o botão direito nele e escolha propriedades

    4. Clique na guia Threads

    5. Volte no IE e crie uma nova TAB;

    6. Volte para o Process Explorer e na base da pilha de execução veja a chamada para o arquivo IEFrame.dll e note que não é criado nenhum novo processo.

    Espero que essa explicação lhe ajude a entender como funciona o mecanismo de tabs no IE7.

    Obrigado,

    Yuri Diógenes

  9. Um fã says:

    Adorei esse artigo – alem da dica no IE ensina a usar outros tools como o Process Explorer.

    Muito boa escolha do tema.

  10. Luciano de Lima - MVP Windows Server says:

    Grannnnnnnde Mestre Yuri!!!

    Mais uma vez você acertou na escolha do tema. Eu imagino que deve ser muito satisfatório para você trabalhar com esse  tipo de troubleshooting.

    Estou publicando no fórum do TechnetBrasil esse artigo, o qual com certeza ira ajudar muita gente que deve estar com esse problema ou algum parecido.

    Um grande abraço.

  11. Rafael (GAS Tecnologia) says:

    Excelente o artigo.  Nos 3 anos que estamos com nosso produto instalado em milhoes de usuarios, nunca havia visto um report tao detalhado e coerente.  Gracas a iniciativas como a sua, temos a oportunidade de diagnosticar problemas com maior precisao e, efetivamente, resolve-los mais rapidamente.  Seria possivel informar em que circunstancias o problema (crash) ocorria?  O Sr. estava navegando em uma pagina do Banco do Brasil ou Banco Real?  Havia acabado de instalar o plugin?  Tinha outras janelas do IE abertas no momento?  (o crash com erro mostrado acima era do plugin do Banco Real – gbiehabn.dll).  Qual o sistema operacional?

    Ainda tem os crash dumps, caso nao consigamos reproduzir aqui?

    Muito obrigado,

    Rafael Del Rey

    Desenvolvedor. GAS Tecnologia.

  12. Eder Pardeiro says:

    Show essa dica.

    Vale lembrar que temos um problema com o IE7 parecido com o do Win3.1. Como você disse, quando no Win3.1 aparecia um erro desse tipo, você perdia tudo o que estava fazendo pois tudo era fechado. Agora acontece a mesma coisa com o IE7 pois quando você tem uma sessão do iexplore.exe aberta com várias GUIAS, e um problema desse gênero ocorre, ele fecha todas as guias abertas.

    Mas a dica é show mesmo. Estou com o mesmo problema aqui e agora dá para resolver.

    Valeu

  13. Ronaldo Menezes - MCP Microsoft Certified Professional says:

    Parabéns pelo artigo Yuri,

    Ele tem informações passadas com muita clareza e detalhamento técnico.

    Gostei tanto do artigo, que estou desenvolvendo um artigo à respeito do Process Explorer e citarei este seu artigo no meu.

    Obrigado.

  14. Ronaldo Menezes - Microsoft Certified Professional says:

    Olá Yuri, conforme eu havia lhe dito o artigo sobre o Process Explorer está neste endereço:

    http://www.itcentral.com.br/default.asp?id=3&ACT=5&content=184&mnu=3

    Convido à acessá-lo e espero que ele seja de grande valia a quem não conhece esta ferramenta tão formidável.

    Obrigado

  15. Albewrto de Santa Rita says:

    tenho duvidas em reistalar o windows xp.

    Alguem pode me ajudar porfavor

  16. Franklin Gouveia says:

    No meu caso não deu certo a sua dica, ainda está dando crash ao abrir o IE7, simplesmente não carrega página alguma, tentei entrar no modo sem complementos e continua com o erro. O que mais posso tentar?

  17. Carlos Rodrigues says:

    Oi,

    Vi sua mensagem no http://blogs.technet.com/latam/archive/2006/12/08/o-internet-explorer-executou-uma-opera-o-ilegal-e-ser-fechado.aspx

    tenho um problema o "EXPLORER causou uma falha de página inválida no módulo GBIEH.DLL em 017f:01c46fff"

    Tomei a liberdade de lhe perguntar como conseguiu resolver a questão?

    Meu Windows inicia e tudo que abro aparece a mensagem:

    GBIEH.DLL  – Extensão de aplicativo – C:WINDOWS

    EXPLORER causou uma falha de página inválida no módulo GBIEH.DLL em 017f:01c46fff.

    IEXPLORE causou uma falha de página inválida no

    módulo GBIEH.DLL em 017f:029b6fff

    MSGSRV32 causou uma falha de página inválida no

    módulo GBIEH.DLL em 017f:10066fff.

    Obrigado.

    Carlos

  18. Marco says:

    Olá, é um excelente artigo, verifiquei que o iexplore é chamado com parâmetro para ignorar extensões. Há uma forma de ver quais são os parâmetros disponíveis? a opção "/?" não funciona em aplicativos para GUI.

    marcoage__@hotmail.com

  19. LUIZ says:

    MUITO BOM !!!

    Complemento aquí com uma maneira prática e rápida de resolver 90% desse tipo de problema com o IE:

    1) Buscar e instalar em seu computador o programa gratuíto “Spybot – Search & Destroy”.

    2) Com o programa aberto e o IE fechado, vá na guia “Ferramentas (lateral esquerda)” e clique em em “BHOs” .

    3) Desative um a um os BHOs que você encontrar ou então radicalmente, elimine todos.

    PRONTO , agora você pode navegar com o IE sem problemas. Para saber mais sobre BHOs que é exatamente sobre o que o nosso amigo publicou no artigo, vá na ajuda do programa  Spybot e na guia Ferramentas cliuque em BHOs.

    Agradeço ao texto do artigo porque ajudou-me a  identificar o problema com o IE e achar essa solução simples e prática que descreví.

    Obrigado

    Luiz

  20. ivan says:

    Olá, muito bom o artigo. Duas ferramentas fundamentais: ‘Process Explorer'[1,6Mb] e ‘AutoRuns'[490kb]. Ferramentas poderosas!

    Dúvida: por que meu Gerenciador de Tarefas mostra vários processos ‘IEXPLORE.EXE’ ativos quando eu possuo apenas uma instância do programa aberta?

    Obrigado.

    Ivan