4087490683

4087490683



używany tylko do sekcji danych. Mimo, iż FASM zaakceptuje atrybut writeable dla sekcji kodu, nie powinniśmy go tam umieszczać. Zapisanie czegokolwiek do sekcji kodu może skończyć się błędem naruszenia ochrony pamięci (segmentation fault). Można jednak w tym segmencie umieszczać dane. Ale należy to robić tak, aby nie stały się one częścią programu, zwykle wpisuje się je za ostatnią komendą kończącą program. Procesor przecież nie wie, co jest pod danym adresem i z miłą chęcią potraktuje to coś jako instrukcję, co może prowadzić do przykrych konsekwencji. Swoje dane umieszczajcie tak, aby w żaden sposób strumień wykonywanych instrukcji nie wszedł na nie. Dane będziemy więc zazwyczaj umieszczać w oddzielnej sekcji.

•    (NASM) section .text

Wskazuje początek segmentu, gdzie znajduje się kod programu. Można jednak w tym segmencie umieszczać dane. Ale należy to robić tak, aby nie stały się one częścią programu, zwykle wpisuje się je za ostatnią komendą kończącą program. Procesor przecież nie wie, co jest pod danym adresem i z miłą chęcią potraktuje to coś jako instrukcję, co może prowadzić do przykrych konsekwencji. Swoje dane umieszczajcie tak, aby w żaden sposób strumień wykonywanych instrukcji nie wszedł na nie. Zapisanie czegokolwiek do sekcji kodu może skończyć się błędem naruszenia ochrony pamięci (segmentation fault), dlatego dane będziemy zazwyczaj umieszczać w oddzielnej sekcji.

•    (NASM) global _start

Sprawiamy, że nazwa _start będzie widziana poza tym programem (konkretnie to przez linker ld, który skompilowaną wersję programu przerobi na wersję wykonywalną).

•    _start: (z dwukropkiem)

Etykieta określająca początek programu.

•    mov eax, 4/mov rax, 1

Do rejestru EAX (32-bitowy) lub RAX (64-bitowy) wstaw (MOV = move, przesuń) wartość 4 (1 na systemach x86-64). Jest to numer funkcji systemu Linux, którą chcemy uruchomić. Jeśli chcemy skorzystać z funkcji systemowych, to zawsze EAX zawiera numer takiej funkcji.

Numery funkcji różnią się na różnych architekturach procesorów. Poczytajcie mój spis funkcji

systemowych-

Komenda MOV ma 3 ważne ograniczenia:

1. nie można skopiować jedną komendą MOV komórki pamięci do innej komórki pamięci, takie coś:

mov [a], [b]

(gdzie a i b - dwie zmienne w pamięci) jest zabronione.

O tym, co oznaczają nawiasy kwadratowe, czyli o adresowaniu zmiennych w pamięci -następnym razem.

2. nie można skopiować jedną komendą MOV jednego rejestru segmentowego (cs,ds,es,ss,fs,gs) do innego rejestru segmentowego, czyli taka operacja

17


Pisanie i kompilowanie (asemblowanie) swoich programów



Wyszukiwarka

Podobne podstrony:
IMAG0780 Podstawowy podział form c^ew^^zych forma jednorazowa1 jest używana tylko do jednego
img103 (5) tylko do tych jednostek, które albo me w pełni uświadamiają sobie swój popęd homoseksualn
3) do wybranej pary obiektów dołącza się kolejne obiekty pojedynczo =» dla każdego jeszcze nie ustaw
P3200047 stosowane tylko do danych wyrażonych w skalach ilościowych (przedziałowa, ilorazowa), podcz
Mimo iż standard nie zawiera tych operacji zarówno Oracle jak i MS SQL oferują operacje agregacji da
Mimo. iż stosowanie jednej stawki planowanej spełnia wymogi ustawowe w odniesieniu do systemu rachun
54988 skanuj0004 (333) Mimo iż wszystkie trzy relacje mówiły o kremacji, do której doszło 30 kw
Leger (3) Francuzi, mimo iż ciągle uważają się za katolików coraz rzadziej chodzą do kościoła. Odset
Warsztaty jako metoda konsultacji społecznych 61 mimo iż nie jest doskonała - przyczynia się do

więcej podobnych podstron