Esplora File crashava e le segnalazioni aumentavano. Con Windows installato su miliardi di dispositivi, il sospettato ovvio era un bug nel codice di Microsoft. Invece, dopo aver esaminato i crash di memoria, l’ingegnere Raymond Chen ha scoperto qualcosa di strano: non era la versione a 64 bit di Esplora File a crashare, ma quella a 32 bit.
Dietro i crash di Esplora File non c’era Windows, ma un programma difettoso
La maggior parte degli utenti non sa che Windows a 64 bit include anche una versione a 32 bit di Esplora File, nascosta nella cartella C:/Windows/SysWOW64. Esiste per ragioni di compatibilità con le vecchie app a 32 bit. Non si avvia con l’interazione normale dell’utente, viene richiamata da applicazioni legacy che ne hanno bisogno.
Il fatto che fosse la versione a 32 bit a crashare è stata la conferma che il problema quasi certamente non era causato dall’utente, ma da un’app di terze parti a 32 bit che interagiva con Windows in modo non standard.
L’indagine, infatti, ha rivelato che il codice di un uninstaller di terze parti stava eseguendo un ciclo in cui tentava ripetutamente di compiere operazioni sui file senza riuscirci. I tentativi fallivano, ma il programma continuava a riprovare. Fin qui, nulla di insolito.
Il problema era nella convenzione di chiamata delle funzioni. L’autore del codice usava la convenzione sbagliata per rimuovere i parametri dallo stack. A ogni tentativo fallito, il programma rimuoveva parametri dallo stack in modo errato, divorando lo stack byte dopo byte.
Dopo un numero sufficiente di tentativi, il puntatore dello stack si era spostato fino a entrare nel codice in esecuzione. Lo stack era stato corrotto al punto da far crashare Esplora File.
La lezione (di nuovo)
Raymond Chen, ingegnere Microsoft da decenni, cronista delle storie più assurde del mondo Windows, usa questo episodio per ribadire un concetto che ha espresso più volte, il crash di un componente Windows non significa sempre che sia colpa di Windows. A volte è un’app di terze parti che interagisce col sistema in modi che il sistema non si aspetta. Ma come aggiunge lo stesso Chen, a volte è effettivamente colpa di Windows. Almeno è stato onesto!