Po co uczyłem się Assemblera

Czym jest assembler

Może na wstępie zacznijmy od tego, czym jest assembler, bo zauważyłem, że wiele osób identyfikuje go z jakimś archaicznym językiem programowania wykładanym na studiach.

Assembler - to właściwie dowolny język programowania, który ma dużą zgodność między instrukcjami języka, a instrukcjami kodu maszynowego danej architektury.

Wstęp

Odnośnie postu o wstępie do programowania niskopoziomowego, padło pytanie: czy znajomość assemblera daje w obecnych czasach jakieś wymierne korzyści?

Odpowiedź jest prosta: TAK! Ale może przytoczę moją historię.

Po co uczyłem się assemblera i programowania niskopoziomowego?

Gdy zaczynałem programować, moje cele były proste, zaczęło się od obsługi wejścia/wyjścia terminala i wykonaniu paru operacji arytmetycznych na zmiennych.

Potem zastanawiałem się jak można stworzyć interfejs graficzny do aplikacji desktopowych, trafiłem wtedy na WPF (Windows Presentation Foundation) - silnik graficzny, API .Net. Tworzyłem proste apki np. TODO listy, zacząłem nawet pisać webapi do ich obsługi.

Później przyszła pora na pisanie prostych gier 2D w Unity. Skupiałem się głównie na implementowaniu konkretnych funkcjonalności.

Gdzieś po drodze był również etap aplikacji webowych, ale w pewnym momencie zacząłem się zastanawiać, jak to właściwie działa.

Jak to się dzieje, że uruchamiając skrypt w pythonie print("hello world") wyświetla się hello world.

Jak to się dzieje że coś się wyświetla w terminalu lub na ekranie monitora.

Nie wystarczało mi korzystanie z gotowych rozwiązań, chciałem poznać te wszystkie warstwy abstrakcyjne po drodze. Jednym z moich celów było napisanie prostego kernela (jądra systemu operacyjnego) pod x86. Co ostatecznie doszło do skutku: https://github.com/Groszekk/OperatingSystem.


Wiele czasu spędziłem na szukaniu w internecie informacji na ten temat, niestety musiałem zbierać informacje z różnych źródeł. Jeśli jesteś w tym samym etapie, co ja kiedyś, to zainteresuj się książką Assembler x86 - Programowanie i Podstawy Systemów Operacyjnych. Aktualnie trwa na nią promocja -43%.


Byłem również zafascynowany tym, jak działa malware, do tego niezbędna była znajomość assemblera, bo robiąc inżynierie wsteczną pliku wykonywalnego mamy przed sobą kod maszynowy (ew. kod bajtowy, zależy od sytuacji ;)), który jest przedstawiany przez debugger, za pomocą języka assemblera.


Podobne artykuły