Wczoraj miała miejsce 607 rocznica bitwy pod Grunwaldem. Jak co roku w tym dniu, dla upamiętnienia zwycięstwa polsko-litewskich wojsk nad Krzyżakami, odbywa się na polach Grunwaldu wielka inscenizacja tej bitwy. Swego czasu, bo 5 lat temu, miałem okazję wraz ze znajomymi zobaczyć tą bitwę na własne oczy.
No i wreszcie, po wielu miesiącach mojego zmiennego stopnia zaangażowania i rozglądania się kupiłem sobie furę. Po około 10-ciu latach przerwy, znów jestem posiadaczem swoich własnych 4 kółek. Będzie można wyskoczyć gdzieś poza miasto na piknik, czy odwiedzić różne ciekawe zakamarki naszego wspaniałego kraju. A trochę ich jest i fajnie będzie się czasem wyrwać ze stolicy na małą weekendową przejażdżkę ;)
I tak stałem się posiadaczem nie tak starego, acz kompaktowego Forda Fiestę.
W zeszłym roku kupując jakaś książkę lub prezent, znalazłem u tego samego sprzedającego jeszcze kilka ciekawych przewodników w promocyjnych cenach, więc skusiłem się na jeden z nich, ten o Islandii. Taka nieskażona kraina wulkanów i lodowców, na dalekim odludziu, wydawała mi się ciekawym miejscem wartym odwiedzenia “kiedyś tam” w niedalekiej przyszłości. Nie musiałem jednak długo czekać bo Anna i znajomi podchwycili ten temat i już zaczęli organizować wyprawę na ten rok.
Miniony weekend minął bardzo aktywnie, bez babrania się w hardware i software, bez zabaw z kompem i elektroniką… W sobotę, tak jak w kilku miejscach kraju, w Warszawie miało miejsce wydarzenie kulturalne znane pod nazwą Noc Muzeów, więc wypadało gdzieś wieczorem wyskoczyć na miasto po dawkę kultury. Zaś w niedzielę była okazja do odwiedzenia warszawskiego zoo. No i wypadałoby coś zanotować o tych wydarzeniach w swoich zapiskach.
Nie za bardzo interesowałem się tegoroczną nocą i możliwymi atrakcjami.
W marcu tego roku, na spotkaniu komitetu standaryzacyjnego C++ w Kona, technicznie zakończono prace nad nową odsłoną standardu języka C++. Nowy draft DIS (N4660) przesłano do finalnego balotowania przez ISO (ISO ballot) i za 5-6 miesięcy oficjalnie powitamy C++17. Zapewne, prócz drobnych ewentualnych korekt w dokumencie, technicznie nic się nie zmieni, więc nieformalnie takie drafty traktowane są już przez społeczność jako standard. Obecnie ostatnim dostępnym dokumentem jest N4659 (różniący się jedynie formatowaniem od niedostępnego publicznie N4660).
Sprzęt i narzędzia zawsze psują się w najmniej oczekiwanych momentach, akurat zawsze gdy chcesz go użyć lub w czasie, gdy już z niego korzystasz. To dotyczy różnorakiego sprzętu, niekoniecznie elektronicznego czy elektrycznego. Pech chciał, że ostatnio padło mi coś z AGD - opiekacz (tudzież toster) Turbo model TV-1150W. W czasie robienia tostów, już w połowie drogi, nagle przestał działać (grzać), a kontrolne lampki zgasły. Pomyślałem, że musiał paść termostat lub bezpiecznik termiczny, a sądząc, że być może nie jest to jednorazówka (bezpiecznik), więc po ostudzeniu spróbowałem uruchomić ponownie, lecz nadal “dupa” była zbita…
Tradycją stało się już to, że okolice “Majówki”, “Czerwcówki” to czas spędzony gdzieś w górach. Tak było w poprzednich latach (Pieniny, Bieszczady, Góry Stołowe, Tatry), tak też było i tym razem. Wraz z dziewczyną i znajomymi pognaliśmy tym razem poza granice kraju, na Słowację w Niżne Tatry. A dokładniej do małej wsi Telgárt położonej na terenie granicznym kilku Słowackich Parków Narodowych.
Mój plan był jak zawsze prosty, w ciągu dnia w góry, a popołudniu, wieczorem grillowanie, drinkowanie lub praca zdalna.
Na forum elektrody natrafiłem na temat związany z operowaniem na dużych liczbach na małych mikrokontrolerach AVR. W istocie temat dotyczył algorytmu szybkiej konwersji dużych liczb zapisanych w naturalnym systemie dwójkowym na ich reprezentację w kodzie BCD. Zagadnienie to wydało mi się na tyle ciekawe i praktyczne (w kilku projektach będę przechodził podobny problem), związane też jest to pokrótce z multipleksowaniem 7-segmentowych wyświetlaczy LED, dlatego postanowiłem zrobić kilka testów (porównań) różnych algorytmów.
W ostatnich moich zapiskach udało mi się wydobyć adres bazowy modułu kernel32.dll oraz opracować funkcję (kod) do iteracji i szukania niezbędnych adresów funkcji z załadowanego modułu w pamięci. Teraz, gdy mam te niezbędne elementy każdego typowego shellcodu pod Windą, wreszcie nadeszła pora na napisanie jakiegoś bardziej sensownego kawałek kodu. Dla przykładu wybrałem sobie odpalanie standardowego kalkulatora (calc.exe).
…
Na początek może kilka słów jak wygląda typowy shellcode. W sieci ciężko coś znaleźć sensownego na ten temat.
Gdy już w swoich rękach mam adres bazowy modułu kernel32.dll (zlokalizowany na przykład sposobem opisanym w poprzednim moim wpisie) kolejnym krokiem jest poznanie adresu dowolnej funkcji znajdującej się w tym module. W wielu sytuacjach wystarczy dorwać się tylko do GetProcAddress i LoadLibrary, co ułatwi wykorzystanie dowolnej innej funkcji z Windows API lub innej biblioteki. W celu znalezienia potrzebnej funkcji w danym module, chociażby osławionego GetProcAddress, muszę sobie napisać jego prosty odpowiednik.