Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Siemka!

 

Szukam poradników/stron/książek dotyczących technicznego działania pamięci, (ułożenie bajtowych wartości zmiennych). Generalnie wszystko co związane jest z zapisywaniem czegoś do pamięci, jak informacje są rozłożone w pamięci. Nie wiem jak to dokładnie opisać, ale czuje że posiadam bardzo małą wiedzę na ten temat, a z pewnością przyda się do daleszej nauki programowania.

 

Chciałbym rozwiązywać tego typu zadania:

Posługując się słowami o odpowiedniej liczbie bitów można zakodować w postaci cyfrowej pewną informację.

Np.: stan pogody: słońce, deszcz, zachmurzenie można zakodować w postaci słów 2-bitowych, tak jak pokazuje tabela:

 

Stan pogody Kod cyfrowy

Słońce 01

Deszcz 10

Zachmurzenie 11

 

 

Chodzi mi właśnie o takie operacje na bitach

Pierdole mpcforum.pl!!! Z przodu z tyłu i z boku

Opublikowano

Wnioskuję, że potrzebujesz tej wiedzy do zabawy z kryptografią ;)

 

Do takiej zabawy musisz poznać operacje bitowe oraz jak zmienne wyglądają w pamięci.

Zacznę może od operacji bitowych, zalicza się do nich: XOR, OR, AND, NOT, SHL, SHR (C++ w kolejności ^, |, &, ~, <<, >>).

XOR to różnica symetryczna, gasi dwa te same bity (1-1 = 0), zostawia pojedyncze palące się bity (1-0 = 1, 0-1 = 1)

101101 xor 110001 = 011100

 

OR to alternatywa, jeśli gdziekolwiek jest zapalony bit, zostaje on przypisany do wyniku końcowego (1 OR 1 = 1, 1 OR 0 = 1, 0 OR 1 = 1, 0 OR 0 = 0)

101101 OR 110001 = 111101

 

AND to koniunkcja, jej wynikiem są wszystkie palące się bity na tej samej pozycji w porównywanych wartościach (1 AND 1 = 1, reszta zawsze równa zero)

101110 AND 111001 = 101000

 

NOT to negacja, odwraca wartość bitów (NOT 1 = 0, NOT 0 = 1)

NOT 111010 = 000101

 

SHL to przesunięcie w lewo, przesuwa bity o określoną ilość miejsc oraz dodaje z prawej strony młodsze, puste bity

101001 SHL 3 (przesuń w lewo o 3) = 001000

 

SHR to przesunięcie w prawo, analogicznie do przesunięcia w lewo, dodaje z lewej strony puste, starsze bity

101001 SHR 2 (przesuń w prawo o 2) = 001010

 

Tyle na temat operacji bitowych. Czas na zmienne. Każda zmienna ma swój zakres a więc i odpowiednią ilość zarezerwowanej pamięci. Zmienne można powiększać i zmniejszać jednakże co się stanie jeśli do zmiennej jedno bajtowej o wartości maksymalnej (w bin 11111111) dodamy 1? Nastąpi przekręcenie licznika i wartość wyniesie minimum (00000000). Jak to wykorzystać? W szyfrowaniu przydaje się takie cudeńko, można jako klucz ustalić wartość do dodania lub odjęcia.

 

Większe zmienne mają nie tylko więcej bajtów ale i są inaczej ułożone. Starsze bajty znajdują się za młodszymi (zapisywane są bajtowo od końca). W pamięci szukając zmiennej o wartości 12345 (0x3039) znajdziemy ją jako [39] [30]. To samo stanie się, jeśli zrobimy rzut tablicy bajtów na zmienną kilku bajtową otrzymamy taki sam wynik (pierwszym elementem w tablicy będzie więc 0x39 a następnym 0x30).

 

Zapis bitowy nie tylko można wykorzystać do szyfrowania, przydaje się on również w aplikacjach przy np ustalaniu flag. Każdy bit w zmiennej może odpowiadać za jakąś funkcję czy cokolwiek sobie programista wymyśli. Jak więc sprawdzić, czy odpowiedni bit jest zapalony? Można to zrobić na kilka sposobów wykorzystując operacje bitowe, np:

To jest ukryta treść, proszę

 

Nie wiem co jeszcze napisać, jeśli nie o to Ci chodziło to mój fail :P

YOU MUST DIE

- Ganon, Koridai

×
×
  • Dodaj nową pozycję...