HexEditor#
Podstawowe informacje#
- Wersja: 0.9.8
- Architektura: 32-bit i 64-bit
- Źródło: GitHub
- Autor: Jens Lorenz (oryginał) i chcg (aktualny fork)
- Przeznaczenie: Przekształca Obszar edycji w podstawowy edytor HEX.
Dodatkowe materiały:
- Plugin Central (info z webarchive)
- JetNpp (fork)
- intvsteve (fork)
- mackwai (fork) - brak rozwoju
- Jens Lorenz (oryginał) - brak rozwoju
Instalacja#
Proces instalacji wtyczki przebiega w sposób standardowy. Finalnie na całą wtyczkę składają się następujące pliki i foldery:
NPP\plugins\HexEditor\HexEditor.dll
NPP\plugins\Config\HexEditor.ini
- pojawia się po pierwszym zamknięciu NPP.NPP\plugins\\HexEditor\Compare
- pojawia się po pierwszym uruchomieniu NPP i wypełnia tymczasowymi plikami.cmp
będącymi wynikami porównania dwóch podglądów HEX.
Wtyczka w oknie Zarządzanie wtyczkami oraz w kategorii Wtyczki widocznej u góry na Pasku menu jest widoczna pod nazwą "HEX-Editor".
Menu wtyczki#
U góry na Pasku menu plugin tworzy następujące menu wtyczki:
Rysunek. HexEditor - menu wtyczki w domyślnym stanie
Opis#
Wtyczka dodaje do programu Notepad++ dwa standardowe narzędzia znane z klasycznych edytorów HEX:
- Podgląd HEX - aktywujemy wybierając u góry na Pasku menu kolejno
Wtyczki >> HexEditor >> View in HEX
(domyślny skrótCtrl+Alt+Shift+H
) lub klikając przycisk na Pasku narzędzi. - Porównanie dwóch podglądów HEX - aktywujemy wybierając u góry na Pasku menu kolejno
Wtyczki >> HexEditor >> Compare HEX
.
Rysunek. HexEditor - pierwsza zwrotka Inwokacji z 'Pana Tadeusza' Adama Mickiewicza w czytelnej postaci (po lewej) i w podglądzie HEX (po prawej) w kodowaniu UTF-8
Podstawowe informacje na temat wtyczki i skrótowy opis poszczególnych jej poleceń można znaleźć w oknie przywoływanym za pomocą polecenia Help...
z menu wtyczki.
Wprowadzenie#
Zanim przejdziemy dalej najpierw należałoby wyjaśnić kilka podstawowych kwestii teoretycznych. Zakładam, że czytelnikowi nie są obce następujące zagadnienia:
- Różne systemy liczbowe (WikiEN, WikiPL), a w szczególności: dziesiętny (WikiEN, WikiPL), dwójkowy/binarny (WikiEN, WikiPL) i szesnastkowy/heksadecymalny (WikiEN, WikiPL).
- Konwersja między powyższymi systemami liczbowymi (szukaj w Google). Znając podstawy sugerowałbym używanie odpowiedniego kalkulatora lub oprogramowania.
- Najpopularniejsze zestawy znaków i sposoby ich kodowania (szczegóły).
Edytor heksadecymalny # (WikiEN, WikiPL), często nazywany też edytorem binarnym, edytorem bajtowym lub krótko edytorem HEX, służy do edycji plików binarnych (np. plików EXE), modyfikacji konkretnych wpisów w sektorach dysku lub ogólnie do podglądu danych w postaciach binarnej i czytelnej (np. zgodnej z ASCII) obok siebie. W podglądzie binarnym każdy bajt najczęściej prezentowany jest w zapisie HEX, gdyż jest on najbardziej kompaktowy i czytelny dla ludzi, choć w tych lepszy edytorach zapis bajtów można zmienić na inny (np. na dwójkowy). Poniżej zamieszczam kilka równorzędnych przykładów dla trzech najważniejszych zapisów liczbowych:
- 216 = 65.53610 = 1.000016
- 224 = 16.777.21610 = 100.000016
- 232 = 4.294.967.29610 = 1.0000.000016
- 216-1 = 65.53510 = FFFF16
- 224-1 = 16.777.21510 = FF.FFFF16
- 232-1 = 4.294.967.29510 = FFFF.FFFF16
Zgodnie z powyższymi przykładami zapisy heksadecymalne FFFF
, FFFFFF
i FFFFFFFF
są krótsze i łatwiejsze do zapamiętania niż ich dziesiętne odpowiedniki 65535
, 16777215
i 4294967295
.
Załóżmy, że mamy jakieś wyjściowe dane #, których bajty (w ilości 64) można przedstawić w jednej linii. W tym momencie ich rzeczywista wartość nie jest istotna, chodzi jedynie o zobrazowanie ich jako całości:
BajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajtBajt
Taki zapis nie jest łatwy do analizowania, a poziomy pasek przewijania jeszcze bardziej utrudnia tę czynność. To, co moglibyśmy zrobić to podzielić całości na stałą liczbę kolumn, np. 16, co przy naszych 64 bajtach z automatu utworzy nam 4 wiersze. Dodatkowo w celu poprawy czytelności możemy dodać jakieś odstępy między wierszami i kolumnami:
Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt
Jest lepiej, ale brakuje jeszcze jakiegoś szybkiego sposobu pozwalającego ustalić, z którym konkretnie bajtem (względem całości) mamy do czynienia, np. z 5., 10. czy 25. Dla małej porcji danych łatwo to wyliczyć w oparciu o liczbę wierszy i kolumn, ale sytuacja się komplikuje, kiedy wierszy jest bardzo dużo i pojawia się pionowy pasek przewijania. Mając już postać bajtów w postaci dwuwymiarowej tablicy możemy użyć stosownej indeksacji, która pozwoli szybko odczytać numer każdego z bajtów. Ze względów praktycznych (wymienionych wyżej) najczęściej używa się indeksów w zapisie HEX, które potocznie określa się adresami. Dla naszego przykładu całość może przyjąć następującą postać:
Adres 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0010 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0020 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0030 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt
Pierwsza kolumna z nagłówkiem Adres
# zawsze zawiera adres dla pierwszego bajtu w danym wierszu, czyli tego, który znajduje się w drugiej kolumnie z nagłówkiem 0
. W oparciu o ten pierwszy adres i nagłówki z kolejnych kolumn możemy wyznaczyć adres pozostałych bajtów w danym wierszu. Dla naszego przykładu każdy bajt można opisać następującymi adresami (szary kolor):
Adres 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F 0010 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0020 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F 0030 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
Oczywiście liczba kolumn dla bajtów to kwestia umowna i w edytorach HEX zazwyczaj można ją dowolnie modyfikować. W układzie z 8. kolumnami nasz przykład przyjmie następującą postać z 8. wierszami:
Adres 0 1 2 3 4 5 6 7 0000 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0000 0001 0002 0003 0004 0005 0006 0007 0008 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0008 0009 000A 000B 000C 000D 000E 000F 0010 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0010 0011 0012 0013 0014 0015 0016 0017 0018 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0018 0019 001A 001B 001C 001D 001E 001F 0020 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0020 0021 0022 0023 0024 0025 0026 0027 0028 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0028 0029 002A 002B 002C 002D 002E 002F 0030 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0030 0031 0032 0033 0034 0035 0036 0037 0038 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0038 0039 003A 003B 003C 003D 003E 003F
Mimo różnego rozkładu wierszy i kolumn liczba bajtów dla naszego wyjściowego przykładu jest taka sama i ostatni z nich ma adres 003F
(dziesiętnie 63
), czyli w rzeczywistości jest 64. bajtem (nie należy zapominać o bajcie na 0. pozycji).
Kolumny nie muszą zawierać pojedynczego bajtu #, czasami łatwiej analizuje się dane, kiedy jest ich więcej, np. 2 (dla kodowania UTF-16) lub 4 (dla kodowania UTF-32). Dzięki temu możemy w wygodny sposób analizować rozkład bajtów w różnych zapisach (BE lub LE). Nasz wyjściowy przykład z 4. kolumnami i 2. bajtami w każdej z nich przyjmie następującą postać:
Adres 0 2 4 6 0000 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0000 0001 0002 0003 0004 0005 0006 0007 0008 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0008 0009 000A 000B 000C 000D 000E 000F 0010 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0010 0011 0012 0013 0014 0015 0016 0017 0018 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0018 0019 001A 001B 001C 001D 001E 001F 0020 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0020 0021 0022 0023 0024 0025 0026 0027 0028 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0028 0029 002A 002B 002C 002D 002E 002F 0030 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0030 0031 0032 0033 0034 0035 0036 0037 0038 Bajt Bajt Bajt Bajt Bajt Bajt Bajt Bajt 0038 0039 003A 003B 003C 003D 003E 003F
Edytory HEX zazwyczaj pozwalają także modyfikować długość adresu #, zwykle w przedziale 4-16 (domyślnie 8). Jeśli analizujemy małe porcje danych to warto ustawić sobie jak najmniejsze wartości, aby cała wizualizacja zajmowała jak najmniejszy obszar na ekranie (początkowe wiodące zera w adresie i tak są zbędne). W poniższej tabeli zamieszczam maksymalny możliwy rozmiar danych przy różnych długościach adresu.
Długość adresu [znaki] | Max. wartość adresu [HEX] | Wielkość danych | ||||||
---|---|---|---|---|---|---|---|---|
[bajt] | [kilobajt] | [megabajt] | [gigabajt] | [terabajt] | [petabajt] | [eksabajt] | ||
1 | F | 16 | 0,015625 | mało | mało | mało | mało | mało |
2 | FF | 256 | 0,25 | mało | mało | mało | mało | mało |
3 | FFF | 4096 | 4 | 0,00390625 | mało | mało | mało | mało |
4 | FFFF | 65536 | 64 | 0,0625 | mało | mało | mało | mało |
5 | FFFFF | 1048576 | 1024 | 1 | mało | mało | mało | mało |
6 | FFFFFF | 16777216 | 16384 | 16 | 0,015625 | mało | mało | mało |
7 | FFFFFFF | 268435456 | 262144 | 256 | 0,25 | mało | mało | mało |
8 | FFFFFFFF | 4294967296 | 4194304 | 4096 | 4 | 0,00390625 | mało | mało |
9 | FFFFFFFFF | 68719476736 | 67108864 | 65536 | 64 | 0,0625 | mało | mało |
10 | FFFFFFFFFF | 1099511627776 | 1073741824 | 1048576 | 1024 | 1 | mało | mało |
11 | FFFFFFFFFFF | 17592186044416 | 17179869184 | 16777216 | 16384 | 16 | 0,015625 | mało |
12 | FFFFFFFFFFFF | 281474976710656 | 274877906944 | 268435456 | 262144 | 256 | 0,25 | mało |
13 | FFFFFFFFFFFFF | 4503599627370496 | 4398046511104 | 4294967296 | 4194304 | 4096 | 4 | 0,00390625 |
14 | FFFFFFFFFFFFFF | 72057594037927936 | 70368744177664 | 68719476736 | 67108864 | 65536 | 64 | 0,0625 |
15 | FFFFFFFFFFFFFFF | 1152921504606846976 | 1125899906842624 | 1099511627776 | 1073741824 | 1048576 | 1024 | 1 |
16 | FFFFFFFFFFFFFFFF | 18446744073709551616 | 18014398509481984 | 17592186044416 | 17179869184 | 16777216 | 16384 | 16 |
Ogólnie rzecz biorąc, te 16 eksabajtów to maksymalna wartość, jaką są w stanie zaadresować obecne 64-bitowe procesory (264). Tak czy inaczej są to niewielkie wartość w porównaniu z tym, ile danych cyfrowych przechowuje ludzkość w obecnych czasach (info1, info2, info3). Kończąc ten wywód warto jeszcze rzucić okiem na kilka ciekawostek w odniesieniu do petabajta.
Podgląd HEX#
Wtyczka działa w specyficzny sposób bo nie posiada własnego okna/panelu, a zamiast tego przekształca Obszar edycji w coś, co przypomina klasyczny edytor HEX. Podgląd HEX aktywujemy wybierając u góry na Pasku menu kolejno Wtyczki >> HexEditor >> View in HEX
(domyślny skrót Ctrl+Alt+Shift+H
) lub klikając przycisk na Pasku narzędzi. Istnieje możliwość automatycznego wywoływania tego trybu dla każdego nowo otwartego pliku (zależnie od jego rozszerzenia) za pomocą odpowiedniej opcji z okna Hex-Editor Options. Włączenie podglądu HEX jest sygnalizowane etykietą Hex Edit View
widoczną w lewym dolnym rogu Pasku stanu. Nawet po wyłączeniu podgląd HEX etykieta dalej jest wyświetlana, co wydaje się być błędem (bug 25).
Z racji tego, że każda karta z Paska kart posiada własny bufor wizualizowany w Obszarze edycji, to przywołanie podglądu HEX i późniejsza jego modyfikacja czy zmiana niektórych jego cech poprzez menu kontekstowego odbywa się tylko i wyłącznie dla tego konkretnego podglądu HEX. Nie ma żadnych hurtowych poleceń, które umożliwiłyby włączenie/wyłączenie podglądu HEX dla wszystkich pootwieranych plików.
Dla uproszczenia wszystkie charakterystyczne obszary tego podglądu można zobrazować za pomocą opisowej grafiki #:
Poszczególne elementy można scharakteryzować następująco:
- [1] Kolumna Address - zawiera adres/indeks dla pierwszego bajtu (tego w kolumnie z nagłówkiem 0) znajdującego się w tym samym wierszu, co adres (szczegóły). Domyślna długość adresu wynosi 8 znaków i maksymalnie jest w stanie zaadresować 4 GB danych (szczegóły). Długość adresu można zmienić na stałe za pomocą okna Hex-Editor Options lub na żądanie za pomocą menu kontekstowego.
- [2] Kolumny bajtów - wyświetlają wartości kolejnych bajtów. Domyślnie kolumn jest 16 (0-F), każda przetrzymuje tylko 1 bajt i wyświetla go w zapisie HEX. Liczbę kolumn, ilość przetrzymywanych w nich bajtów i format zapisu bajtu można zmienić na stałe za pomocą okna Hex-Editor Options lub na żądanie za pomocą menu kontekstowego.
- [3] Kolumna Dump - wyświetla graficzną reprezentację bajtów zgodnie z bieżącym kodowaniem ANSI używanym przez system Windows (można odczytać z okna Debug Info), gdzie pierwsze 128 znaków (0-127) to w zasadzie zestaw ASCII (info1, info2). Niestety graficzny podgląd nie obsługuje innych zestawów znaków i kodowań (bug 28).
Rysunek. HexEditor - pierwsza zwrotka Inwokacji z 'Pana Tadeusza' Adama Mickiewicza w czytelnej postaci (po lewej) i w podglądzie HEX (po prawej) w kodowaniu ANSI
Domyślny układ podglądu HEX i wygląd poszczególnych jego elementów można dostroić poprzez okno Hex-Editor Options.
Przy użyciu myszy lub klawiatury możemy wykonywać pewne operacje na elementach z podglądu HEX:
- Kliknięcie lewym przyciskiem myszy na bajcie z kolumny bajtów umieszcza w nim kursor i podkreśla odpowiadający mu znak w kolumnie Dump. Operacja ta jest dwukierunkowa, tj. umieszczenie kursora przed znakiem w kolumnie Dump podkreśla odpowiadający mu bajt w kolumnie bajtów.
- Można modyfikować wartości bajtów lub odpowiadających im znaków. Wszystko zależy od aktualnego położenia kursora, przy czym zmiana jednego zapisu jest automatycznie odzwierciedlana w drugim zapisie.
- Klawisz lewo/prawo przenosi kursor o jedną pozycję w lewo/prawo w kolumnie bajtów lub w kolumnie Dump. Jeśli jest to początek lub koniec wiersza to następuje przejście do poprzedniego/następnego wiersza (jeśli istnieje). Alternatywnie można skorzystać z lewego kliknięcia myszy w konkretnym miejscu.
- Klawisz góra/dół przenosi kursor o jeden wiersz w górę/dół (jeśli istnieje) w kolumnie bajtów lub w kolumnie Dump. Alternatywnie można skorzystać z lewego kliknięcia myszy w konkretnym miejscu.
- Klawisz Home/End przenosi kursor na początek/koniec aktualnie wybranego wiersza w kolumnie bajtów lub w kolumnie Dump.
- Klawisz PageUp/PageDown przenosi kursor do pierwszego/ostatniego widocznego wiersza w kolumnie bajtów lub kolumnie Dump. Wielokrotne wciśnięcie tych klawiszy w końcu wybierze pierwszy lub ostatni wiersz, a ilość potrzebnych do tego wciśnięć jest zależna od rozmiaru analizowanych danych.
- Położenie kursor w podglądzie HEX i w odpowiadającym mu Obszarze edycji jest synchronizowane dla każdego pliku z osobna, dlatego kolejne włączania/wyłączania podglądu HEX nie powodują przemieszczania kursora.
Można zaznaczać wiele bajtów/znaków standardowymi kombinacjami, np. lewy klik myszy + przeciąganie, Shift + strzałki lew/prawo/góra/dół czy Shift + Home/End/PageUp/PageDown. Rozciągnięcie zaznaczenia w jednym zapisie (np. na bajtach) jest automatycznie odzwierciedlana w drugim zapisie (tj. na znakach). Zaznaczenie ma osobny kolor dla tekstu i tła, które można zmienić. Zaznaczenie w podglądzie HEX i w odpowiadającym mu Obszarze edycji jest synchronizowane dla każdego pliku z osobna, dlatego kolejne włączania/wyłączania podglądu HEX nie powodują jego utraty.
Podgląd HEX nie obsługuje zaznaczeń składających się z wielu zakresów, dlatego jeśli w Obszarze edycji wykonamy takie zaznaczenie i przywołamy dla niego podgląd HEX, to odzwierciedlony w podglądzie zostanie jedynie ostatni zakres z tego zaznaczenia.
- Standardowe operacje Kopiuj/Wytnij/Wklej/Wyczyść działają tylko przy użyciu menu kontekstowego lub kiedy wybierzemy je wprost z kategorii Edycja widocznej u góry na Pasku menu. Odpowiadające im skróty klawiszowe nie są obsługiwane (prócz DEL).
- Podobnie jest z operacjami Cofnij/Ponów, które działają tylko jeśli wybierzemy je wprost z kategorii Edycja widocznej u góry na Pasku menu. Odpowiadające im skróty klawiszowe nie są obsługiwane.
- Wyłączenie podglądu HEX powoduje całkowitą utratę historii wykonywanych zmian w danym pliku, tj. polecenia Cofnij/Ponów nie działają. Trzeba na to uważać, bo w bardzo prosty sposób możemy utracić oryginalne dane, a ich odzyskanie będzie możliwe jedynie poprzez odtworzenie z jakiejś kopii zapasowej, o ile takową posiadamy (bug 27).
- Aktualnie wybrany wiersz, tj. ten w którym znajduje się kursor, ma osobny kolor tła, który można zmienić.
Kliknięcie lewym przyciskiem myszy na adresie dodaje do niego zakładkę w postaci osobnego koloru tekstu i tła, które można zmienić. Usunięcie zakładki również wykonuje się poprzez lewy klik myszy na oznaczonym adresie. Zakładki są zapamiętywane między kolejnymi włączeniami/wyłączeniami podglądu HEX dla każdego pliku z osobna, i na dobre przepadają dopiero po zamknięciu pliku lub programu Notepad++.
Menu kontekstowe#
Podgląd HEX posiada własne menu kontekstowe pod prawym klawiszem myszy, które zawiera cztery standardowe operacje na tekście oraz umożliwia wyrywkowe przełączenie niektórych opcji dla aktualnie wybranego podglądu HEX. Trzeba wyraźnie zaznaczyć, że domyślne ustawienia z okna Hex-Editor Options mają zastosowanie tylko przy aktywacji podglądu HEX, a poprzez menu kontekstowe część z nich możemy dodatkowo zmienić dla każdego podgląd HEX z osobna.
W zależności od stanu podglądu HEX przywołującego menu kontekstowe niektóre pozycje tego menu będą niedostępne (wyszarzone) lub zmienione. Poniżej zamieszczam wykaz wszystkich dostępnych poleceń oraz i ich krótką charakterystykę:
- Cut/Copy/Paste/Delete - standardowe polecenia edycyjne wykonujące operacje wycinania, kopiowania, wklejania czy usuwania. Alternatywnie można skorzystać z identycznie działających poleceń z kategorii Edycja widocznej u góry na uproszczonym Pasku menu. Odpowiadające im skróty klawiszowe nie są obsługiwane (prócz DEL).
View in - odpowiada za prezentację bajtów w kolumnach z bajtami.
- 8-bit/16-bit/32-bit/64-bit - ustala liczbę bajtów przypadających na jedną kolumnę w kolumnach z bajtami. Domyślną wartością jest 1 bajt (8-bit) na kolumnę, ale można ją zwiększyć kolejno do 2 bajtów (16-bit), 4 bajtów (32-bit) i 8 bajtów (64-bit), co dodatkowo odblokuje trzecie polecenie odpowiadające za przełączanie kolejności wyświetlania bajtów w danej kolumnie. W pewnych okolicznościach liczba bajtów przypadających na jedną kolumnę (i ich kolejność wyświetlania) ułatwia analizę danych (szczegóły).
- to Binary lub to Hex - przełącza wyświetlanie bajtów z bieżącego formatu do drugiego formatu (HEX do binarnego lub binarnego do HEX). Domyślnym formatem dla bajtów jest zapis heksadecymalny. Aktualnie wybrany format jest umieszczany na Pasku stanu w zastępstwie pola informującego o preferowanych znakach końca linii.
- to LittleEndian lub to BigEndian - przełącza kolejność wyświetlania bajtów w danej kolumnie z bieżącego formatu do drugiego formatu (BigEndian do LittleEndian lub LittleEndian do BigEndian). Opcja widoczna tylko i wyłącznie w sytuacji, kiedy włączono wyświetlanie więcej niż 1 bajtu na kolumnę. Domyślną kolejnością wyświetlania bajtów jest BigEndian. Aktualnie wybrana kolejność wyświetlania bajtów jest umieszczana na Pasku stanu w zastępstwie pola informującego o bieżącym kodowaniu pliku. W pewnych okolicznościach przełączenie kolejności wyświetlania bajtów w danej kolumnie (i ich liczba przypadająca na jedną kolumnę) ułatwia analizę danych (szczegóły).
Address Width... - przywołuje okno Address Width z możliwością zmiany długości adresu w przedziale 4-16 znaków. Domyślna długość adresu wynosi 8 znaków i maksymalnie jest w stanie zaadresować 4 GB danych (szczegóły).
Rysunek. HexEditor - okno Address Width z domyślną długością dla adresu równą 8 znaków
Próba wprowadzenia wartości spoza dopuszczalnego zakresu jest zabroniona, o czym zostaniemy poinformowani stosownym komunikatem.
Columns... - przywołuje okno Column Count z możliwością zmiany liczby kolumn z bajtami w przedziale 1-128. Domyślna liczba kolumn z bajtami wynosi 16 i jest najodpowiedniejsza/najwygodniejsza przy jednoczesnym ustawieniu jednego bajta na kolumnę oraz przy prezentowaniu bajtów w zapisie heksadecymalnym (szczegóły).
Rysunek. HexEditor - okno Column Count z domyślną liczbą kolumn z bajtami równą 16
Próba wprowadzenia wartości spoza dopuszczalnego zakresu jest zabroniona, o czym zostaniemy poinformowani stosownym komunikatem.
Uproszczony Pasek menu#
Przełączenie się na kartę z Paska kart, która ma włączony podgląd HEX powoduje, że Pasek menu z głównego okna programu zostanie automatycznie zmodyfikowany. Jest to konieczne bo nie wszystkie operacje dostępne w oryginalnym Pasku menu są możliwe do wykonania przy włączonym podglądzie HEX. Niektóre kategorie są całkowicie zablokowane (wyszarzone): Format
, Składnia
, Narzędzia
i Makra
, a cztery pierwsze znacznie odchudzono:
To, że jakiegoś oryginalnego polecenia nie ma w zmodyfikowanych kategoriach nie zawsze oznacza, że nie można go wywołać przy użyciu skrótu klawiszowego, przykładowo polecenie Przełącz tryb Post-It
(skrót F12
) z kategorii Widok
jest niewidoczne, chociaż przełączenie podglądu HEX w tryb Post-It wciąż działa. Nie wykluczam, że takich przypadków może być znacznie więcej, ale nie miałem szczególnych powodów, by wszystkie je zlokalizować.
Oprócz przebudowy oryginalnego Paska menu wtyczka lekko modyfikuje też jego wygląd. Już na pierwszy rzut oka widać, że w podmienionym Pasku menu odstępy między poleceniami w poszczególnych kategoriach są znacznie mniejsze, co czyni całość bardziej kompaktową. Znak fajki przy poleceniach dwustanowych ma prostszą formę i jest koloru czarnego, podobnie zresztą jak separator między grupami poleceń.
Rysunek. HexEditor - wygląd kategorii Widok z Paska menu (z lewej oryginalny i z prawej po włączeniu a następnie wyłączeniu podglądu HEX)
Problem w tym, że jednokrotne włączenie podglądu HEX trwale narzuca ten nowy wygląd, i nawet po wyłączeniu wszystkich podglądów HEX nowy wygląd wciąż jest aktywny (bug 26). Przywrócenie oryginalnego wyglądu Paska menu jest możliwe tylko poprzez ponowne uruchomienie programu Notepad++ lub otworzenie kolejnego głównego okna programu.
Dodatkowe okna#
Przy włączonym podglądzie HEX wtyczka dodatkowo udostępnia pięć własnych okien pozwalających wykonywać podstawowe operacje na prezentowanych w ten sposób danych. Wszystkie okna z kategorii Szukaj w uproszczonym Pasku menu tak naprawdę zastępują ich oryginalne odpowiedniki dostępne przy wyłączonym podglądzie HEX. Poniżej zamieszczam listę wszystkich dodatkowych okien tworzonych przez wtyczkę:
Find # - przywołujemy wybierając u góry na Pasku menu kolejno
Szukaj >> Szukaj...
(domyślny skrótCtrl+F
). Jeśli okno było włączone (oryginalne lub podmienione) to kolejne włączenia/wyłączenia podglądu HEX powodują automatyczne przełączanie między oryginalnym a podmienionym oknem.Replace # - przywołujemy wybierając u góry na Pasku menu kolejno
Szukaj >> Zastąp...
(domyślny skrótCtrl+H
). Jeśli okno było włączone (oryginalne lub podmienione) to kolejne włączenia/wyłączenia podglądu HEX powodują automatyczne przełączanie między oryginalnym a podmienionym oknem.Go To... # - przywołujemy wybierając u góry na Pasku menu kolejno
Szukaj >> Przejdź do...
(domyślny skrótCtrl+G
). Jeśli okno było włączone (oryginalne lub podmienione) to kolejne włączenia/wyłączenia podglądu HEX powodują automatyczne przełączanie między oryginalnym a podmienionym oknem.Insert Columns # - przywołujemy wybierając u góry na Pasku menu kolejno
Wtyczki >> HEX-Editor >> Insert Columns...
Pattern Replace # - przywołujemy wybierając u góry na Pasku menu kolejno
Wtyczki >> HEX-Editor >> Pattern Replace...
Porównanie dwóch podglądów HEX#
Wtyczka pozwala porównywać dwa podglądy HEX obok siebie poprzez wybranie u góry na Pasku menu kolejno Wtyczki >> HexEditor >> Compare HEX
. Prawidłowe zastosowanie tego polecenia wymaga spełnienia następujących warunków jeszcze przed jego wywołaniem:
- Jeden z porównywanych plików należy przenieść do drugiego widoku.
- W obu porównywanych plikach z dwóch różnych widoków należy włączyć podgląd HEX.
- Nie można porównywać tego samego pliku po sklonowaniu go do drugiego widoku. Koniecznie muszą być to pliki w różnych lokalizacjach, chociaż ta sama nazwa w obu porównywanych plikach wciąż jest dopuszczalna.
Bez spełnienia powyższych warunków polecenie Compare HEX
jest całkowicie zablokowane (wyszarzone). Polecenie działa tak, że porównywane są bajty z tych samych pozycji # (wiersz do wiersza i kolumna do kolumny) między obydwoma podglądami HEX i wszystkie odnalezione różniące zostaną oznaczone osobnym kolorem tekstu i tła, które można zmienić. Porównanie dotyczy wszystkich bajtów z obu podglądów HEX i nie można tego zawęzić poprzez zaznaczenie ich konkretnych fragmentów.
W trakcie wykonywania porównania wtyczka generuje pomocnicze pliki .cmp
, osobno dla każdej porównywanej pary, i umieszcza je w dodatkowym folderze NPP\plugins\HexEditor\Compare
. Anulowanie wyników porównania wymaga wybrania u góry na Pasku menu kolejno Wtyczki >> HexEditor >> Clear Compare Results
w każdym porównywanym podglądzie HEX z osobna. Teoretycznie operacja ta powinna usunąć także odpowiadający plik .cmp
, ale nie zawsze się tak dzieje, szczególnie kiedy zamkniemy porównywane pliki przed wywołaniem operacji czyszczącej. Z tego też powodu warto co jakiś czas ręcznie przeczyścić cały katalog NPP\plugins\HexEditor\Compare
.
Porównanie dwóch identycznych podglądów HEX jest sygnalizowane komunikatem Files Match
w dodatkowym oknie Hex-Editor Compare o charakterze modalnym. W tym wypadku również tworzony jest plik .cmp
, ale zostaje on automatycznie usunięty po zamknięciu tego okna.
Rysunek. HexEditor - okno Hex-Editor Compare informujące o porównaniu dwóch identycznych podglądów HEX
Problem z tym poleceniem jest taki, że dostawienie choćby jednego nadmiarowego znaku w porównywanych danych powoduje, że większość kolejnych znaków (i czasami nawet ten dostawiony jeśli się różni) zwykle są traktowane jak różnice i oznaczone dodatkowym tłem. Wynika to wprost z wspomnianego już nieco wcześniej bajtowego porównywania wykonywanego przez wtyczkę.
Rysunek. HexEditor - porównanie dwóch identycznie wyglądających plików (w drugim dostawiono znacznik BOM na początku)
Z tego też powodu polecenie to nie specjalnie nadaje się do wyszukiwania różnic między podobnie wyglądającymi danymi tekstowymi, i w tym kontekście prawdopodobnie lepiej sprawdzi się wtyczka ComparePlus lub jej alternatywy.
Hex-Editor Options#
Wtyczka daje większą kontrolę nad wyglądem podglądu HEX za pośrednictwem okna Hex-Editor Options o charakterze modalnym, które przywołujemy poleceniem Options...
dostępnym w menu wtyczki. Ustawienia z tego okna są domyślnymi dla wszystkich nowo otwartych podglądów HEX, ale przy pomocy menu kontekstowego część tych opcji można przesłonić dla każdego podglądu HEX z osobna.
Trzeba wyraźnie zaznaczyć, że zmiana niektórych opcji w oknie Hex-Editor Options wymaga ponownego uruchomienia programu Notepad++, co na pierwszy rzut oka nie musi być oczywiste (bug 19). Alternatywnie można też zamknąć i ponownie otworzyć plik, dla którego podgląd HEX został chociaż raz przywołany, co spowoduje, że kolejna aktywacja podglądu HEX uwzględni przeprowadzone zmiany. Nie dotyczy to tych plików, którym podgląd HEX nie został ani razu włączony. Na potrzebę późniejszych opisów obie te czynności nazywam wspólnym terminem twarde przeładowanie podglądu HEX #.
Okno Hex-Editor Options składa się z czterech zakładek, które można scharakteryzować następująco:
Start Layout # - odpowiada za początkowy układ i wygląd podglądu HEX.
8-bit/16-bit/32-bit/64-bit - ustala liczbę bajtów przypadających na jedną kolumnę w kolumnach z bajtami. Domyślną wartością jest 1 bajt (8-bit) na kolumnę, ale można ją zwiększyć kolejno do 2 bajtów (16-bit), 4 bajtów (32-bit) i 8 bajtów (64-bit). W pewnych okolicznościach liczba bajtów przypadających na jedną kolumnę (i ich kolejność wyświetlania) ułatwia analizę danych (szczegóły). Zmiana ustawienia może wymagać twardego przeładowania podglądu HEX.
Hexadecimal/Binary - ustala format zapisu bajtów w kolumnach z bajtami. Domyślnym formatem dla bajtów jest zapis heksadecymalny. Aktualnie wybrany format jest umieszczany na Pasku stanu w zastępstwie pola informującego o preferowanych znakach końca linii. Zmiana ustawienia może wymagać twardego przeładowania podglądu HEX.
Big-Endian/Little-Endian - ustala kolejność wyświetlania bajtów w danej kolumnie. Ma to znaczenie tylko i wyłącznie w sytuacji, kiedy kolumna z bajtami zawiera więcej niż 1 bajt. Domyślną kolejnością wyświetlania bajtów jest BigEndian. Aktualnie wybrana kolejność wyświetlania bajtów jest umieszczana na Pasku stanu w zastępstwie pola informującego o bieżącym kodowaniu pliku. W pewnych okolicznościach przełączenie kolejności wyświetlania bajtów w danej kolumnie (i ich liczba przypadająca na jedną kolumnę) ułatwia analizę danych (szczegóły). Zmiana ustawienia może wymagać twardego przeładowania podglądu HEX.
Column Count - ustala liczbę kolumn z bajtami z bajtami w przedziale 1-128. Domyślna liczba kolumn z bajtami wynosi 16 i jest najodpowiedniejsza/najwygodniejsza przy jednoczesnym ustawieniu jednego bajta na kolumnę oraz przy prezentowaniu bajtów w zapisie heksadecymalnym (szczegóły). Zmiana ustawienia może wymagać twardego przeładowania podglądu HEX. Próba wprowadzenia wartości spoza dopuszczalnego zakresu jest zabroniona, o czym zostaniemy poinformowani stosownym komunikatem.
Address Width - ustala długości adresu w przedziale 4-16 znaków. Domyślna długość adresu wynosi 8 znaków i maksymalnie jest w stanie zaadresować 4 GB danych (szczegóły). Zmiana ustawienia może wymagać twardego przeładowania podglądu HEX. Próba wprowadzenia wartości spoza dopuszczalnego zakresu jest zabroniona, o czym zostaniemy poinformowani stosownym komunikatem.
Startup # - odpowiada za zachowanie wtyczki zaraz po otworzeniu pliku/plików.
Extensions - ustala dla jakich rozszerzeń plików podgląd HEX będzie automatycznie przywoływany od razu przy otwarciu tych plików. Pole przyjmuje rozszerzenia niezależnie od wielkości znaków (a także użycia kroki bądź nie), gdzie separatorem między kolejnymi rozszerzeniami jest spacja. Następujący zapis jest prawidłowy:
txt XML hTmL .data .ExE
. Domyślnie pole to pozostaje puste, co oznacza konieczność ręcznego przywoływania podglądu HEX dla każdego pliku z osobna. Zmiana ustawienia może wymagać twardego przeładowania podglądu HEX.Control char count in % - nie ustaliłem do czego służy ta opcja!
Colors # - odpowiada za kolor tekstu lub kolor tła dla niektórych elementów w podglądzie HEX. Zmiana ustawień zaskakuje od razu po kliknięciu na przycisk
OK
. Domyślne wartości podano w formaciedziesiętnie/heksadecymalnie/(r, g, b)
.- Regular Text - kolor i tło dla regularnego tekstu w całym podglądzie HEX. Domyślnymi wartościami są kolejno
0/0/0
i16777215/FFFFFF/(255, 255, 255)
. - Selection - kolor i tło dla zaznaczeń wykonanych na bajtach w kolumnie z bajtami i znakach w kolumnie Dump. Domyślnymi wartościami są kolejno
16777215/FFFFFF/(255, 255, 255)
i16746632/FF8888/(255, 136, 136)
. - Compare - kolor i tło dla różniących się bajtów/znaków przy porównywaniu dwóch podglądów HEX. Domyślnymi wartościami są kolejno
16777215/FFFFFF/(255, 255, 255)
i8947967/8888FF/(137, 71, 150)
. - Bookmark - kolor i tło dla zakładek ustawionych przy adresach w kolumnie Address. Domyślnymi wartościami są kolejno
16777215/FFFFFF/(255, 255, 255)
i255/FF00/(255, 0, 0)
. - Current Line - tło dla aktualnie wybranego wiersza. Domyślną wartością jest
14671839/DFDFDF/(223, 223, 223)
.
Każda z wyżej wymienionych opcji posiada listę wyboru, której rozwinięcie wyświetla uproszczoną paletę kolorów (8x6 = 48 kolorów), a dodatkowy przycisk tej palety
More Colors...
przywołuje okno z systemową paletą kolorów.- Regular Text - kolor i tło dla regularnego tekstu w całym podglądzie HEX. Domyślnymi wartościami są kolejno
Font # - odpowiada za wybór użytej czcionki i podstawowe jej cechy dla tekstu w całym podglądzie HEX. Zmiana ustawień zaskakuje od razu po kliknięciu na przycisk
OK
.- Font name - nazwa użytej czcionki. Dostępne są następujące czcionki:
@BatangChe
,@DFKai-SB
,@DotumChe
,@FangSong
,@GulimChe
,@GungsuhChe
,@KaiTi
,@MingLiU
,@MS Gothic
,@MS Mincho
,@NSimSun
,@SimHei
,@SimSun-ExtB
,BatangChe
,Consolas
,Courier
,Courier New
,DFKai-SB
,DotumChe
,FangSong
,Fixedsys
,GulimChe
,GungsuhChe
,KaiTi
,Lucida Console
,Lucida Sans Typewriter Regular
,MingLiU
,Miriam Fixed
,MS Gothic
,MS Mincho
,NSimSun
,Rod
,SimHei
,Simplified Arabic Fixed
,SimSun-ExtB
iTerminal
. Domyślną wartością jest czcionkaCourier New
. - Font size - rozmiar użytej czcionki. Dostępne są następujące wielkości:
8
,9
,10
,11
,12
,14
,16
,18
,20
i22
. Domyślną wartością jest wielkość16
. - Capital letters mode - po zaznaczeniu tej opcji wszystkie litery w kolumnie z adresami i w kolumnach z bajtami (dotyczy nagłówków jaki i wartości bajtów) mają wielką postać. Domyślnie pole to jest odznaczone i stosowane są małe litery.
- Mirror of Cursor is Rect - po zaznaczeniu tej opcji odpowiadający znak w kolumnie Dump lub bajt w kolumnie bajtów (zależnie od tego gdzie aktualnie znajduje się kursor) zostaje oznaczony prostokątnym obrysem (od siebie dodam, że bardzo słabo widocznym). Domyślnie pole to jest odznaczone i w odpowiadającym znaku/bajcie stosuje się wyraźne podkreślenie.
- Bold - po zaznaczeniu tej opcji czcionka uzyskuje pogrubienie. Domyślnie pole to jest odznaczone i czcionka nie posiada pogrubienia.
- Italic - po zaznaczeniu tej opcji czcionka uzyskuje pochylenie. Domyślnie pole to jest odznaczone i czcionka nie posiada pochylenia.
- Underline - po zaznaczeniu tej opcji czcionka uzyskuje podkreślenie. Domyślnie pole to jest odznaczone i czcionka nie posiada podkreślenie.
- Font name - nazwa użytej czcionki. Dostępne są następujące czcionki:
Alternatywa#
Ogólnie rzecz biorąc wtyczka wprowadza do programu Notepad++ najprostszą formę edytora HEX. Przy prostych czynnościach sprawdza się znakomicie, jak chociażby w trakcie nauki zagadnień związanych z zestawami znaków i ich kodowaniami. Niestety na chwilę obecną zawiera sporo nierozwiązanych błędów, a i tempo rozwoju bieżącego projektu jest w zasadzie symboliczne. Przy grubszych zadaniach warto sięgnąć po coś bardziej aktualnego i rozbudowanego:
- Klasyczne programy - Hex Editor Neo, MadEdit (oryginał), MadEdit (fork LiMinggang), MadEdit (fork wxMEdit).
- Narzędzia online - hexed.it, onlinehexeditor.com, hex-works.com.