Asembler x86/Narzędzia: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Nasm nie jest własnością firmy intel. Stworzony został przez grupę programistów (i nie tylko) nie związaną z intelem. Jest WOLNY (GNU LGPL).
Lethern (dyskusja | edycje)
m drobne
Linia 1:
Aby móc cokolwiek zrobić z naszą wiedzą nt. języka asembleraAsembler, będziemy potrzebować kilku narzędzi, które nam to umożliwią.
 
== Asembler i linker ==
Program tłumaczący kod z językujęzyka asembleraAsembler na pliki z wykonywalnym kodem nazywamy '''asemblerem'''. Obecnie jest 3 liderów w tej dziedzinie:
* '''Microsoft Macro Assembler ([http://www.masm32.com/ MASM])''' firmy Microsoft
* '''Turbo Assembler ([http://info.borland.com/borlandcpp/cppcomp/tasmfact.html TASM])''' firmy Borland
* '''Netwide Assembler ([http://nasm.sourceforge.net/ NASM])'''
Pierwsze dwa asemblery są dostępne jedynie w wersjach dla systemu Windows, zaś NASM jest dostępny w wersjach dla większości platform. Szczególnie(szczególnie popularny w środowiskach Linuksowych). Wszystkie asemblery są niemal identyczne w działaniu. Główne różnice leżą w makroinstrukcjach i dyrektywach, lecz i tutaj można zauważyć wiele podobieństw.<br\ >
Asembler tworzy pliki .obj, które następnie można połączyć w plik wykonywalny za pomocą '''linkera'''. MASM jest udostępniany z własnym linkerem link.exe, TASM z Turbo Linkerem, zaś NASM jest z reguły używany w połączeniu z programem GNU Linker lub ALINK.<br\ >
Wybierz jeden z powyższych asemblerów i omijaj rozdziały, które go nie dotyczą (rozdziały, w których składnie asemblerów różnią się, są w kilku kopiach, po jednej dla każdego asemblera).<br\ >
Który więc asembler wybrać? Jeśli interesuje Cię programowanie jedynie dla systemu Windows, dobrym wyborem jest MASM, jeśli chcesz mieć możliwość programowania pod niemal każdą platformę, wybierz asembler NASM (64-bitowa wersja jest obecnie w fazie testów). TASM także jest dobrym asemblerem, ale jest płatny, przez co nie polecam korzystania z niego, gdyż wydajność tworzonego kodu jest praktycznie identyczna w przypadku wszystkich 3 asemblerów (nie mają tu żadnego znaczenia programy znane z języków wysokiego poziomu jakjako optymalizatory).
 
== Debuger ==
Debugery mają za zadanie pomóc programiście w odnalezieniu błędów w programie. Większość debugerów pozwala dodatkowo na wstawianie w kodzie tzw. punktów wstrzymania, gdzie to debugger wstrzymuje działanie programu do czasu, dopóki nie dostanie odpowiedniej komendy od programisty. Debugery dodatkowo pozwalają na odczytanie wartości rejestrów procesora, czy wartości poszczególnych zmiennych. Obecnie najpopularniejszy debuger to '''[http://www.ollydbg.de/ OllyDbg]''', jednak do prostych zastosowań wystarczą również proste debugery, dostarczane wraz z asemblerami. Wielu programistów uważa je za zupełnie opcjonalne narzędzie, jednak większość starszych doświadczonych programistów jest ich fanatycznymi zwolennikami i tępi pierwszą grupę niemal jakojak heretyków. Ze względu na należne uznanie dla tej drugiej grupy, należy nie traktować tego narzędzia zbyt pobłażliwie.
 
== Disasembler ==
Disasembler to program tłumaczący kod maszynowy na język asemblera. Z reguły proste disasemblery dostarczane są w pakiecie wraz z asemblerami (bardzo dobry disasembler dostarczany jest wraz z asemblerem NASM). Jako, że jest to proces dość złożony, istnieje wiele komercyjnych disasemblerów, z których wg. ogólnej opinii najlepszy to '''[http://www.datarescue.com/idabase/index.htm IDA Pro Disassembler]'''. Dzięki tej grupie programów możemy wejrzeć w kod cudzych programów, jednak zdeasemblowanyzdeasemblerowany kod znacznie różni się od oryginału, przez co jego interpretacja może być dość trudna. Proces interpretacji tegoż kodu nazywamy mianem '''inżynierii wstecznej''' (ang. ''reverse engineering''). Disasemblery są z reguły używane w połączeniu z debugerami (IDA Pro Disassembler jest jednocześnie disasemblerem jak i debugerem).
 
== IDE ==
Zintegrowane środowisko programistyczne (ang. ''integrated development environment'' ('''IDE''')) łączy w sobie wszystkie powyższe narzędzia, dodając jeszcze edytor tekstowy oraz, z reguły, jakieśjeszcze inne dodatkowe narzędzia. Większość asemblerów pracuje w trybie konsolowym, więc ręczne korzystanie z nich jest skrajnie niewygodne. IDE robią większość zbędnej pracy za nas. Nie ma wśród nich żadnego faworyta; oto kilka z nich:
* [http://www.programmersheaven.com/download/35506/download.aspx Chrome IDE] ([http://upload.wikimedia.org/wikibooks/pl/f/f5/Chrome_IDE_screenshot.png zrzut ekranu])
* [http://www.radasm.com/ RadASM] ([http://www.radasm.com/pics/pics.html zrzuty ekranu])