Wydobywając kod firmware z kodu procesu Sealogic (SaeLog #4), w jednym z możliwości związanych z hookowaniem transmisji USB, wspomniałem o technice wstrzykiwania kodu do uruchomionego procesu, wykorzystującej popularną metodę ze zdalnym wątkiem (CreateRemoteThread). Sugerując przy tym wykorzystanie dostępnych w sieci injectorów lub napisanie czegoś własnego. Od tego czasu, w wolnych chwilach, próbowałem okiełznać i uporządkować mój kod, jaki używałem do tego typu zabaw. W istocie zrodził się projekt syringe, jako uniwersalnego narzędzia związanego z wstrzykiwaniem kodu i nie tylko… i tak zacząłem pisać stary/nowy kod…
W kodzie Windowsa można znaleźć czasem ciekawe fragmenty, które skrywają pomocne mechanizmy i sposoby ułatwiające debugowanie różnych elementów, nie tylko systemowych. Część, jeśli nie wszystkie, takie wstawki nie są nigdzie udokumentowane. Zatem nic dziwnego, że dziś znów trafiłem na kolejny taki trick w kodzie systemowym. Mowa tutaj o conditional breakpoint przy ustawianiu kodu błędu, co może być bardzo pomocne przy ciężkim debugowaniu nieszczęśliwych przypadków.
Większość systemowych funkcji, ale nie tylko takich, w razie błędu ustawia odpowiednią wartość nie-zerową, określającą zaistniałą sytuację.
Mija kolejny kwartał, a mojej aktywności na rynku brak. Chociaż początek był bardzo dobry, wydawało się, że nic nie zakłóci mojego planu, no ale jak nie Ukraina to Grecja, albo wielka przecena Energii. A tymczasem przedstawiam małe podsumowanie mijających dziś 3 miesięcy.
Sytuacja na GPW Po rosnących indeksach w kwietniu mogłoby się wydawać, że wreszcie polski parkiet budzi się z letargu i zacznie przyspieszać. Można było oczekiwać lepszych czasów, ale w połowie kwartału nagle sytuacja się odwróciła, trend zmienił kierunek i wszystko zaczęło przybierać ponury kolor.
Mała przerwa od serii zabaw kodem analizatora logicznego. W ostatnim wpisie o ekstrakcji kodu firmware (SaeLog #4) wspomniałem o kilku innych, ciekawych tematach. Jednym z nich była kwestia związana z przechowywaniem stałych danych w sekcji .rdata, o których teraz chciałbym nieco więcej powiedzieć. A szczególnie o tym jak pisanie kodu rzutuje na generowany przez kompilator/linker plik wynikowy.
Sekcje i segmenty w PE i innych Pliki binarne zawierające kod wykonywalny (executables), czyli zwykle exe, biblioteki DLL, czy pliki obiektowe (a także kilka innych) w większości systemów są zbliżone do siebie formatem lub budową.
Chcąc zajrzeć do kodu firmware zaszytego w urządzeniu Saleae Logic, trzeba go najpierw jakoś zdobyć. Kod ten w typowej aplikacji USB-FX2 ładowany jest do urządzenia po uprzednim jego wykryciu przez oprogramowanie zainstalowane na komputerze, wprost poprzez port USB. Idąc tym tropem można być pewnym, że znajdzie się go gdzieś w paczce z aplikacją lub w samym kodzie programu. Przyszła więc pora na jego wydobycie, bez tego nie będzie możliwa dalsza zabawa…
Jak szybko ten czas leci, już 3 miesiące mineło, nie tak dawno Nowego Roku, a ja ciągle wspominam swoje rozważania nad zeszłorocznym raportem dotyczącym mojej aktywności giełdowej, a tutaj nadaża się już kolejna okazja do kwartalnego podsumowania mojej udręki z inwestycjami giełdowymi. Ten pierwszy kwartał roku 2015 nie wypadł wcale najgorzej. Mogę nawet powiedzieć, że wręcz dobrze biorąc pod uwagę mój stopień (a raczej brak) zaangażowania.
Sytuacja na GPW Na polskich i zagranicznych rynkach było bardzo gorąco w tym kwartale.
Już od jakiegoś czasu przyglądałem się kodowi zaszytemu w chipie oraz starałem przypomnieć sobie asemblera 8051. Robiąc sobie małą przerwę od analizy firmware, całkiem przypadkiem trafiłem na małą niespodziankę. Po odłączeniu pamięci EEPROM (wyjęcie zworki) już po wykryciu i załadowaniu oprogramowania do układu, nie stwarza żadnych widocznych problemów z softem. Aplikacja się nie wywala i wydaje się działać poprawnie. Mimo, iż CY7C68013A będzie odpowiadał na odczyty z I2C spod adresu 0xA0 jakimiś losowymi danymi-śmieciami.
W miniony weekend wybrałem się z dziewczyną do Muzeum Techniki i Przemysłu działającego w Warszawie. Na 2 piętrach muzeum zebrano pokaźny zbiór eksponatów i sprzętu dotyczącego historii polskiej techniki i nie tylko. Ponadto oprócz wystaw stałych, muzeum organizuje wystawy czasowe, często z różnych okazji i rocznic. Naprawdę ciekawe, fajne rzeczy można tam zobaczyć, a każdy napewno znajdzie coś interesującego, budzącego ciekawość.
Do tej pory jakoś nie bardzo dzieliłem się wszelkimi ciekawymi podróżami i urlopowymi wyjazdami w różne zakątki świata i Polski.
Jedną z pierwszych rzeczy niezbędnych do rozwiązania problemu, a może tylko do poznania mechanizmu działania komunikacji programu z pamięcią EEPROM, jest analiza funkcji, które za to odpowiadają. Obiekt LogicAnalyzerDevice udostępnia dwie metody do służące do tego celu, są to ReadEeprom i WriteEeprom. Wspominałem już o nich w poprzedniej części, ale dopiero niedawno udało mi się im bliżej przyjrzeć i wyłonić obraz ich działania. Dodatkowo w czasie analizy, pojawiło się kilka ciekawych, związanych z tymi funkcjami aspektów.
Nowe wersje oprogramowania dla analizatora logicznego Saleae Logic mają problemy z obsługą nieoryginalnego sprzętu opartego na prostej aplikacji kostki CY7C68013A, w którym zastosowano większą pamięć adresowaną wordem. Napomknąłem o tym problemie w poprzedniej notce przy okazji testów płytki deweloperskiej z układem Cypressa w roli analizatora logicznego. Obiecałem sobie również, że spróbuje rozwiązać ten problem programowo, zamiast sprzętowo. Bez ingerencji lutownicą i wymiany pamięci EEPROM, ale za to ingerując w oprogramowanie. Zatem zabrałem się do tego celu, zaglądając do środka programu Logic, aby sprawdzić co się tam w środku dzieje.