Online: 0x074 (116)
haker.iиfø  — Etyczny hacking_
Spreading knowledge like a virus.

 haker.info Baza wiedzy

Asembler x86/x64
  • Adresowanie operandów


W celu uzyskania dostępu do określonego miejsca w pamięci lub rejestru procesora należy zapoznać się z metodami adresowania. Poniżej przedstawiono sposoby adresowania operandów w Asemblerze x64. Dla nie znających jeszcze instrukcji Asemblera wprowadzę tutaj opis instrukcji kopiowania wartości z jednego operandu do drugiego. Jest to instrukcja MOV i ma następującą składnię: MOV operand docelowy, operand źródłowy.

Adresowanie natychmiastowe polega na podaniu jako operand wartości liczbowej nazywanej właśnie wartością natychmiastową. Zatem zapis MOV RAX, 7 wpisuje wartość 7 do rejestru akumulatora RAX.

  • Adresowanie rejestrowe polega na podaniu jako operand nazwy rejestru np. MOV RAX, RCX. Zapis ten kopiuje wartość rejestru RCX do rejestru RAX.
  • Adresowanie pośrednie polega na podaniu jako operand adresu w pamięci spod którego ma być pobrana wartość np. MOV RAX, qword ptr [zmienna].
  • Adresowanie pośrednie rejestrowe polega na podaniu jako operand rejestru w którym jest adres komórki w pamięci np. MOV RAX, qword ptr [RCX].
  • Adresowanie pośrednie z przesunięciem polega na podaniu dodatkowo wartości przesunięcia (ang. offset) np. MOV RAX, qword ptr [RCX+2] czy też MOV RAX, qword ptr [zmienna+2].
  • Adresowanie bazowo-indeksowe polega na podaniu bazy i dodania do niej indeksu. Indeks może być pomnożony przez skalę 1, 2, 4 czy 8 zależnie od rozmiaru elementu np. MOV RAX, qword ptr [RDX+RDI*8]. Opcjonalnie też przesunięcie.

Warto dodać, że architektura x64 wprowadziła adresowanie relatywne do wskaźnika instrukcji (RIP). Pozwala to łatwiej tworzyć kod niezależny od miejsca w pamięci (relokowalny czy wstrzykiwalny). Asembler MASM64 ma to domyślnie*.

*Asembler MASM64 (ML64.EXE) korzysta z adresowania relatywnego do wskaźnika instrukcji w sposób domniemany (ang. implicit).

Dawid Farbaniec

Wykaz literatury (bibliografia)

  • Advanced Micro Devices Inc., 2017 – AMD64 Architecture Programmer's Manual
  • Intel Corporation, 2019 – Intel 64 and IA-32 Architectures Software Developer's Manual
  • Randall Hyde, 2010 – Asembler. Sztuka programowania. Wydanie II, ISBN: 9788324628544
Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Korzystając z zasobów witryny haker.info oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.