Blog (17)
Komentarze (1.3k)
Recenzje (1)

DOS not compute!

@RyanDOS not compute!17.10.2010 02:01

Wyobraźcie sobie, że oglądacie kiepski film sci-fi, w którym robot przechodzi poważne spięcie. Dostał sprzeczne instrukcje, spotkał niecodzienny problem, został fizycznie uszkodzony. Co wykrzykuje taki robot?

Przypominam, to kiepski film a nie Odyseja Kosmiczna 2001. To nie HAL 9000 (I'm sorry, Dave. I'm afraid I can't do that.), nie wysublimowana maszyna, która stara się pogodzić etykę robotów ukutą przez Asimova z zaprogramowanymi procedurami, a nieskomplikowany obiekt z aluminiowych rur i z żarówkami zamiast oczu. Gapimy się w ekran telewizora i nie mamy wątpliwości, że w środku tej puszki siedzi człowiek. Biedny aktor, który nie dostał roli dzięki urodzie Brada Pitta, a dlatego, że jako jedyny mieścił się w kostiumie.

Trochę odbiegłem chyba od tematu. :-) Co powtarza taki robot? Does. Not. Compute. Jest to także reakcja jakiej oczekiwałbym od większości użytkowników vortalu, jeśli dostaną kod w assemblerze x86 do rąk. Dlatego zachowując odrobinę zdrowego rozsądku, postanowiłem oprzeć nowe zadanie o coś, co zapewne każdy użytkownik vortalu potrafi: uruchamianie programów. Prześledźmy zatem jak dzisiejsze wyzwanie powstawało.

Przygotowanie zadania opartego o ASM dla użytkowników różnych systemów jest stosunkowo problematyczne. W końcu nie bez powodu dobreprogramy oferują osobne pliki dla Linuksa i Mac OS X. Gdyby program odpalał się na czymkolwiek, nie mielibyśmy odpowiednich działów na stronie. Co zatem zrobić, żeby na każdej platformie dało się uruchomić aplikację? Oprzeć o DOS, platformę, której nie ma nikt!

A nie, przepraszam, nie chcę się wystawić na krytykę z cyklu "czyli nikt nie był w stanie tego zadania zrobić!". Rzecz w tym, że aplikacje pod DOS można uruchamiać w takim świetnym emulatorze jakim jest DOSBox. Wolne oprogramowanie, popularne, szalenie użyteczne. Mam je nawet od dawna w ulubionych. :-)

Pozostaje tylko znalezienie kompilatora, po który może sięgnąć każdy (dostępnego w sieci za darmo) i który pod DOSem działa. Dobrze, gdyby istniała też wersja na inne systemy. Pierwotnie kod był pisany dla Turbo Assemblera, ale komercyjny status tej aplikacji powodowałby, że zadanie byłoby wyłącznie "dla wybranych". A nie o to przecież chodzi. Wybór padł na flat assembler (znany także jako FASM), którego autorem jest Tomasz Grysztar. FASM dostępny jest zarówno pod DOS, Linuksa jak i Windows. Jest to stosunkowo istotne, bo daje większy wybór użytkownikom.

Czas na drobną uwagę. Dróg dojścia do wynikowego programu jak i sposobów uruchomienia go jest kilka. Jeśli mamy szczęście i pracujemy na 32-bitowym Windowsie, zarówno FASM pod Windows jak i FASM pod DOS powinny bez problemu skompilować kod, a wynikowa aplikacja uruchomi się w gołym systemie. Powinna być poprzedzona błędem, ale będzie działała. Jeśli użyjemy DOSBoksa, możemy w nim uruchomić kompilator i program wynikowy albo sam program wynikowy. Bez względu na system operacyjny!

Istnienie obu możliwości jest dosyć ważne, bo start FASM na "czystym" DOSBoksie może wymagać dodatkowego kroku - uruchomienia extendera takiego jak CWSDPMI. Nie jest to wiedza dzisiaj specjalnie powszechna, zdaję sobie z tego sprawę. Ale podkreślam, że nie jest to jedyna droga do rozwiązania. Ta elastyczność jednak, jak dowodzą komentarze, okazała się być dosyć osobliwym utrudnieniem dla części z grających.

Warto także dodać, że istnieje szereg innych opcji, których nie będę szerzej opisywał, jak np. wirtualizacja innego systemu, XP Mode w Windows 7 czy rzeczy, o których nie mam pojęcia, że są możliwe, ale na które wpadli zapobiegliwi użytkownicy vortalu. :-] Kawał dobrej roboty!

Bo widzicie, do tego zadania potrzeba kilku zdolności. Część z nich wydaje mi się typowa dla odwiedzających vortal: umiejętność instalowania aplikacji i podstawy obsługi Notatnika. No i są jeszcze te dwie szalenie ważne, bez których zadania nie da się rozwiązać: pomysłowość i upór.

Zadanie skonstruowane jest mniej więcej tak: weź F16, naklej w kokpicie karteczkę o treści "spytaj bufetową o godzinę, żeby wygrać" i postaw koło samolotu biorących udział w konkursie. Część powie: "zobaczę co jest w kokpicie, może mnie olśni". Część krzyknie "skandal! wymagają pilotowania myśliwca!" i z odpowiedzi zrezygnuje. Nie czuję się specjalnie winny, że właśnie tak skonstruowane jest to zadanie. Nie bez powodu ma w nazwie słowo "specjalne". :->

Zatem przepis na rozwiązanie jest tym razem stosunkowo prosty: pobrać DOSBox, pobrać FASM, pobrać program, kompilować i kombinować. Ale przede wszystkim: czytać treść zadania!

Fantastycznie! Lubię ASMa, Tato! Powiedziała ruda Karolinka Prosty jest ten szyfr - dodała - ale za to Widzę, że we flincie flinta

Wierszyk może nie najwyższych lotów, ale jako rodzony Częstochowianin ponad rymy częstochowskie się raczej nie wzniosę. ;-) Wierszyk ma za zadanie informować o trzech rzeczach. Po pierwsze: podpowiada jaki kompilator jest potrzebny poprzez pierwsze litery słów z pierwszego wersu. Dla ułatwienia pogrubiłem je tutaj. Na stronie konkursowej były one wyróżnione kursywą. Po drugie: informuje, że mamy do czynienia z szyfrem. Po trzecie: podpowiada, że zadanie nie jest złożone z jednej tylko fazy.

"Flinta we flincie" to określenie (które wedle mojej wiedzy - proszę o sprostowanie w razie czego) pochodzi z magazynu Magia i Miecz, w którym to służyło do opisu przygód, w których wykorzystano więcej niż jeden zwrot fabularny. Flinta we flincie, strzelba ukryta w strzelbie, ostrze w ostrzu, zagadka w zagadce. Bo taki charakter ma dołączony do zadania kod.

format MZ

  push    cs
  pop     ds
  mov     cl, 77
  mov     si, MAGIC2

foo:
  mov     al, [si]
  cmp     cl, al
  je      bar

  inc     si
  add     bl, al
  xor     bh, bh

  mov     ah, 06h
  mov     dl, [MAGIC1+bx]
  int     21h
  jmp     foo

bar:
  mov     ax,4C00h
  int     21h

MAGIC1  db "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789, "
MAGIC2  db 12,244,6,2,250,26,9,222,254,36,246,7,2,248,1
        db 5,2,247,2,7,252,4,248,1,4,3,249,4,3,248,0,255
        db 9,255,1,248,2,1,5,247,6,3,248,1,6,1,253,0,77

Uruchomienie FASM jest naprawdę proste: w linii komend wpisujemy nazwę kompilatora (np. fasm.exe) i za nią nazwę pliku z kodem. Voila! Uruchamiamy wynikowy program i naszym oczom ukazuje się tekst:

MAGIC2 DB 18,238,13,6,237,37,221,9,245,17,239,77

Wystarczy rzut oka na kompilowany kod, by wpaść na przynajmniej kilka potencjalnych sposobów na wykorzystanie tego. Można podmienić jedną linię, a można podmienić trzy. Można też usiąść i płakać, ale zadania mają premiować wytrwałych, pomysłowych i chętnych do eksperymentowania a nie tych, których zaangażowanie kończy się na odczytaniu pierwszego wyniku z wyszukiwarki.

Nie wnikając w sposób działania tego kodu (jeśli istnieje takie zapotrzebowanie, mogę opisać w osobnej notce) dodam tylko, że zarówno podmiana jednej linii jak i trzech ostatnich dają oczekiwany rezultat. Bo jeżeli podmienimy odpowiedni fragment kodu, ponownie skompilujemy i uruchomimy program, naszym oczom pokaże się ostateczne rozwiązanie. Jakie? To nazwa miasta, w którym znajduje się główna siedziba Intela.

SANTA CLARA

I to jest odpowiedź na drugie zadanie specjalne. Wszystkim, którzy do niego dotarli gratuluję wzorowego podejścia do postawionego problemu. :-)

Na koniec jeszcze kilka uwag. Nie będę tym razem pisał jakie losowe odpowiedzi trafiły się nam. Dość powiedzieć, że procent poprawnych odpowiedzi jest wyższy niż w przypadku poprzedniego zadania. To świadczy wprost o tym, że było ono dużo bardziej strawne niż poprzednie zakodowane pytanie.

Z komentarzy na stronie wynika, że grający "rozbijali" się na różnych etapach tego zadania. Część nie zauważyła podpowiedzi w wierszyku i używała innego kompilatora. Podejrzewam, że najczęściej kończyło się to błędem na linijce "format MZ". Część ta jest w przypadku FASM kluczowa, by wygenerowany program uruchomił się pod DOSBoksem, a zatem by użytkownicy wszystkich najpopularniejszych systemów operacyjnych (Win, Linux, Mac OS X) mogli wynikowy kod uruchomić.

Część zignorowała podpowiedź o zadaniu w zadaniu, lub nie zadała sobie trudu eksperymentowania z kodem. Stąd m.in. odpowiedzi pod postacią przepisanej magicznej wartości z pierwszego uruchomienia. Uprzedzając pytania: takie odpowiedzi nie będą nagradzane punktami.

Część rozbiła się o schody do kokpitu F16: czy to o przerażający fakt istnienia kodu jako części zadania, czy to przy próbie uruchomienia kompilatora albo programu wynikowego. Uważam jednak, że moje oczekiwania wobec grających nie były szczególnie wygórowane; DOSBox to nie jest jakaś szalenie ezoteryczna aplikacja. Jest w dziale pobierania vortalu, pojawiał się w aktualnościach. Zdobycie i uruchomienie jego jak i FASM nie powinno wykraczać poza umiejętności grających.

Cieszę się, że - jak wnioskuję po komentarzach - części z Was podobało się zadanie. Całej reszcie pozostaje mi życzyć więcej szczęścia w następnym zadaniu specjalnym. Może lepiej trafię w Wasz gust. :-) Ale ostrzegam, że następne zadanie specjalne naprawdę będzie trudniejsze. ;->

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.