Cum ma ajuta un tool bun sa ma uit la TV
Mi-am reinstalat azi tunerul TV si am vrut sa iau si ultima versiune de software (3.1.1.2) de pe site-ul companiei producatoare. Am facut download iar la prima rulare aplicatia a crapat.
Pentru ca insistam sa ma uit la TV, am decis sa investighez problema
. M-am gandit la ce tool m-ar putea ajuta mai mult in situatia de fata si m-am oprit la IDA pe care l-am luat de aici . Apoi am deschis fisierul cu pricina: C:\Program Files\WinFast\WFTVFM\WFTV.exe si l-am lasat pe IDA sa-l analizeze.
(click pe poza pentru a o mari)
Apoi am pornit debugger-ul din IDA. La scurt timp a ajuns la codul cu pricina si a dat un warning:
(click pe poza pentru a o mari)
Ducandu-ma la cod am observat ca dereferentia un pointer NULL. Dupa cum se vede, incerca sa acceseze membrul unei structuri care nu era alocata (registrul EDX avea valoarea zero si se incerca accesarea zonei de la adresa EDX+4)
(click pe poza pentru a o mari)
Mai departe am vrut sa aflu ce e cu structura respectiva. Am vazut ca eroarea are loc in apelul functiei fgetc, datorita parametrului stream care este NULL si a carui valoare era copiata in EDX. De aici am banuit ca se incearca citirea dintr-un fisier care nu a fost deschis. Pentru a confirma banuiala am apelat tot la IDA. M-am uitat pe stiva pentru a vedea cine este apelantul lui fgetc si pentru a vedea de unde vine argumentul eronat.
(click pe poza pentru a o mari)
Asa ca am dat dublu-click pe adresa apelantului (47B48Ah) pentru a vedea codul.
Am vrut sa vad apoi cum se ajunge cu executia aici asa ca am urmat calea indicata de a doua sageata albastra. Am ajuns asadar la locul unde s-a incercat deschiderea fisierului deci banuiala era confirmata. Se incerca deschiderea fisierului wincdl.cfg.
(click pe poza pentru a o mari)
Uitandu-ma pe codul dezasamblat am vazut ca nu se facea vreo verificare a rezultatului apelului catre fopen. In concluzie, in cazul in care deschiderea esueaza (fopen intoarce NULL), cazul nu este tratat si se merge mai departe cu un pointer NULL. Pentru a verifica aceasta, m-am uitat la rezultatul intors de fopen (stocat in registrul EAX). S-a dovedit a fi NULL, deci deschiderea fisierului a esuat.
M-am uitat in directorul aplicatiei si am observat ca fisierul lipsea asa ca am decis sa creez un fisier gol cu numele respectiv si sa rulez din nou aplicatia. Surpriza! Aplicatia a rulat fara probleme!
Am observat cu aceasta ocazie inca o data cat de importante sunt tratarea erorilor si testarea in ciclul de dezvoltare al unui produs software. Am anuntat compania producatoare si voi reveni cu un update in cazul in care primesc un raspuns.
In final, ii multumesc lui IDA pentru ca datorita acestui soft minunat acum ma pot uita la TV fara probleme





December 14th, 2006 - 20:22
Uau! Esti tare!
December 15th, 2006 - 17:31
eu am dezinstalat+instalat winfast’ul si o mers:)…oricum, nicely done…
December 16th, 2006 - 02:01
wicked
December 18th, 2006 - 23:53
Foarte tare domnule. Esti un adevarat. Te invidiez.
December 19th, 2006 - 00:06
Subscriu lui Alexandru. Candva o sa imi cumpar o palarie ca sa mi-o pot ridica in fata voastra.
January 5th, 2007 - 08:02
respect pt tine si stiintza ta, OMULE.
January 21st, 2007 - 01:28
Ma tot intrebam eu de ce crapa asa des ultima versiune de winfast (TV2000 Expert = tunerul meu preferat , pe care l-am recomand tuturor celor care doreau sa scape de TV).
Chiar nu imi imaginam ca poti face asa ceva (analizarea erorilor) fara a decompila exe-ul.
Felicitari.
January 26th, 2007 - 09:23
eu cred k esti cam maniac !
February 1st, 2007 - 02:30
esti fenomenal! ar fi beton daca ai face un post si despre cauza aparitiei unui blue screen..
November 25th, 2009 - 01:05
esti tare
am creat cate un fis gol wincdl.cfg in fiecare folder din C:\Program Files\WinFast si surpriza, a mers
January 17th, 2010 - 17:14
Ai dreptate, a mers cu adaugarea fisierului respectiv…. chiar nu stiam ce sa ii mac fac mai ales ca dezinstalasem si reinstalasem de o groaza de ori si driverele si aplicatia….
Multam.