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
Anonymous
January 01, 2003
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ógenesAnonymous
January 01, 2003
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=20318bAnonymous
January 01, 2003
Olá Ronaldo, Parabéns pelo artigo, li e ficou muito bom. Obrigado por fazer referência ao nosso Blog. Yuri DiógenesAnonymous
January 01, 2003
Obrigado pela visita e pelo suporte ao nosso Blog.Anonymous
January 01, 2003
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
Anonymous
January 01, 2003
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ógenesAnonymous
January 01, 2003
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ógenesAnonymous
January 01, 2003
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:
- Abra o Process Explorer
- Abra o IE7
- Veja o processo que foi criado para o iexplorer.exe. Clique com o botão direito nele e escolha propriedades
- Clique na guia Threads
- Volte no IE e crie uma nova TAB;
- 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
Anonymous
December 09, 2006
Adorei esse artigo - alem da dica no IE ensina a usar outros tools como o Process Explorer. Muito boa escolha do tema.Anonymous
December 10, 2006
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.Anonymous
December 18, 2006
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.Anonymous
December 22, 2006
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. ValeuAnonymous
January 12, 2007
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.Anonymous
January 24, 2007
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. ObrigadoAnonymous
January 31, 2007
tenho duvidas em reistalar o windows xp. Alguem pode me ajudar porfavorAnonymous
March 14, 2007
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?Anonymous
May 18, 2007
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. CarlosAnonymous
July 26, 2007
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.comAnonymous
February 10, 2008
MUITO BOM !!! Complemento aquí com uma maneira prática e rápida de resolver 90% desse tipo de problema com o IE:
- Buscar e instalar em seu computador o programa gratuíto "Spybot - Search & Destroy".
- Com o programa aberto e o IE fechado, vá na guia "Ferramentas (lateral esquerda)" e clique em em "BHOs" .
- 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
- Anonymous
March 12, 2008
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