• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Asembler - nawiasy kwadratowe w poleceniu

Object Storage Arubacloud
0 głosów
757 wizyt
pytanie zadane 23 października 2018 w Assembler przez aram100 Użytkownik (500 p.)
Hej

Czym w asemblerze różni się polecenie:

mov eax, ebx

od

mov [eax], ebx

 

Mógłby ktoś łopatologicznie wytłumaczyć?

2 odpowiedzi

+2 głosów
odpowiedź 23 października 2018 przez Arkadiusz Sikorski Pasjonat (20,160 p.)
wybrane 24 października 2018 przez aram100
 
Najlepsza

Użyte jest tu odwołanie do pamięci (pośrednie, adres w rejestrze eax). W skrócie, w komórce pamięci o adresie określonej w rejestrze eax, umieszczana jest wartość z rejestru ebx. W pierwszym przypadku natomiast zawartość ebx jest umieszczana w rejestrze eax, a nie w pamięci.

0 głosów
odpowiedź 24 października 2018 przez aram100 Użytkownik (500 p.)
Dzięki wielkie za odpowiedź, mam jeszcze jedno pytanie

ESI wskazuje na adres tekstu w little endian , a ECX zawiera jego liczbę znaków - przekonwertuj tekst na big endian tak aby rejestr EDI wskazywał na jego początek

Coś takiego?

BSWAP ESI
mov EDI, [ECX]
mov EDI, ESI

 

- nie wiem czy to ostatnie polecenie zrobi to o co chodzi
komentarz 24 października 2018 przez aram100 Użytkownik (500 p.)
Albo coś z OFFSET kombinować?...
komentarz 24 października 2018 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Wykonując BSWAP na ESI dokonujesz zmiany kolejności bitów adresu stringa, który jest zapisany w ESI, a nie kolejności bitów w bajtach tego stringa.

Musisz przejść po każdym bajcie stringa i zmienić "endianowość" każdego bajtu bswapem.

Przykładowy pseudokod:

dopóki ECX > 0:
     zamień kolejność bitów w aktualnym bajcie
     przesuń wskaźnik ESI do następnego bajtu stringa
     zmniejsz ECX

Oczywiście warto na początku skopiować sobie zawartość ESI do EDI, żeby zapamiętać sobie początek naszego stringa (w powyższym algorytmie tracimy informację o początku, bo przesuwamy ESI).

Tracimy też informację o rozmiarze napisu, więc możesz sobie tę pętlę zorganizować inaczej (np. użyć jakiegoś rejestru jako zmiennej licznikowej i zwiększać ją, dopóki będzie ona mniejsza od rozmiaru stringa, czyli ECX). 

PS Podczas rozpatrywania kolejnych bajtów przesuwać wskaźnik możesz sobie dodając 1 do adresu w ESI lub używając insturkcji LEA. 

PPS Możliwości na rozwiązanie zadania jest oczywiście kilka, to tylko jedna z nich.

Podobne pytania

0 głosów
0 odpowiedzi 36 wizyt
pytanie zadane 1 grudnia 2023 w Assembler przez hutsalo1998 Użytkownik (520 p.)
0 głosów
3 odpowiedzi 222 wizyt
pytanie zadane 23 listopada 2023 w Assembler przez hutsalo1998 Użytkownik (520 p.)
0 głosów
1 odpowiedź 500 wizyt
pytanie zadane 12 maja 2020 w Assembler przez evela Nowicjusz (120 p.)

92,568 zapytań

141,423 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...