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

Usunięta treść Dodana treść
Mythov (dyskusja | edycje)
→‎IDE: dodano info o Eclipse
Mythov (dyskusja | edycje)
Nie podano opisu zmian
Linia 7:
* '''Turbo Assembler ([http://info.borland.com/borlandcpp/cppcomp/tasmfact.html TASM])''' firmy Borland
* '''Netwide Assembler ([http://nasm.sourceforge.net/ NASM])''' firmy Intel
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 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. Wybierz sobie 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).
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 jak 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 tą pierwszą grupę niemal jako 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 zdeasemblowany 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 ===
Linia 26 ⟶ 27:
 
== Zaczynamy! ==
Poniżej znajdziesz kilka wersji tego samego programu, dla różnych asemblerów. Przeczytaj tylko rozdział dotyczący asemblera, który wybrałeś; resztę możesz pominąć.
=== Hello world! (MASM) ===
Zacznijmy od dawki kodu, żeby mieć pojęcie jak to w ogóle wygląda. Będzie to tradycyjny już program Hello World:
<pre>
Linia 70 ⟶ 72:
end
Określa że w tym miejscu kończy się kod. Asembler po napotkaniu tego słowa kończy proces asemblacji, niezależnie od tego, czy znajduje się jakiś kod jeszcze dalej.
 
== Hello World! (NASM) ==
<pre>
segment dane
tekst db "Hello World!",0Ah,0Dh,"$"
 
segment stosik stack
resb 64
szczyt_stosu:
 
segment code
..start:
mov ax, dane
mov ds, ax
mov ax, stosik
mov ss, ax
mov sp, szczyt_stosu
mov dx, tekst
mov ah, 9
int 0x21
mov ax, 0x4C00
int 0x21
end
</pre>
 
=== Goodbye world... ===