Więc jeśli wszystko zrozumiałem poprawnie
Nie do końca.
Jest to plik binarny, a jego dane są dla nas, ludzi, niezrozumiałe
Zazwyczaj plik binarny jest niezrozumiały dla człowieka i komputera, szczególnie gdy jego cel jest nieznany. Zauważ, że nie wszystkie pliki binarne są plikami wykonywalnymi. Wiele plików binarnych to pliki danych, które nie zawierają żadnych instrukcji maszynowych. Dlatego podczas nazywania plików (w niektórych systemach operacyjnych) używane są rozszerzenia plików. The. com przedłużenie był używany przez CP / M dla oznaczenia plik wykonywalny. The. rozszerzenie exe zostało dodane przez MS-DOS w celu oznaczenia innego formatu pliku wykonywalnego. * Nixy używają atrybutu execute, aby wskazać, które pliki można wykonać, chociaż może to być zarówno skrypt, jak i kod.
Jak już wspomniano inni, pliki binarne zawierające liczby powinny być przeglądane przez program zrzutu heksadecymalnego lub edytor heksadecymalny, a nie przez przeglądarkę tekstową.
istnieje przykład zawartości programu ping.exe
Ten plik jest programem relokowalnym i nie wszystkie dane w tym pliku reprezentują kod maszynowy. Istnieją informacje na temat programu, takie jak biblioteki dynamiczne, których potrzebuje, które procedury muszą być połączone, wymagania dotyczące stosu, programu i pamięci danych oraz punkt wejścia programu. Operandy adresowe w pliku mogą być względnymi wartościami, które należy obliczyć do wartości bezwzględnych lub referencjami, które należy rozwiązać.
„Plik programu”, o którym prawdopodobnie myślisz, nazywa się plikiem obrazu binarnego lub zrzutem pamięci programu. Taki plik zawierałby tylko kod maszynowy i dane, a wszystkie odwołania do adresów były odpowiednio ustawione do wykonania.
nawet jeśli znają kod asemblera (najniższy poziom języka maszynowego).
Język asemblera to nie to samo co język maszynowy . Typowy (aby wykluczyć komputery wysokiego poziomu) procesor przyjmuje kod maszynowy jako dane wejściowe, jedna instrukcja na raz. Argumentami są albo rejestry, albo numeryczne adresy pamięci. Język asemblera jest językiem wyższego poziomu, który może używać symbolicznych etykiet dla lokalizacji instrukcji i zmiennych, a także zastępować numeryczne kody operacyjne mnemonikami. Program w asemblerze musi zostać przekonwertowany na język / kod maszynowy, zanim będzie mógł zostać faktycznie wykonany (zazwyczaj za pomocą narzędzi zwanych asemblerem, konsolidatorem i modułem ładującym).
Operację odwrotną, deasemblację, można wykonać na plikach programu z pewnym sukcesem i utratą informacji symbolicznych. Demontaż zrzutu pamięci lub pliku obrazu programu wymaga więcej prób i błędów, ponieważ lokalizacje kodu i danych muszą być identyfikowane ręcznie.
BTW są osoby, które potrafią czytać i kodować (numeryczny) kod maszynowy. Oczywiście jest to o wiele łatwiejsze na 8-bitowym procesorze lub mikrokontrolerze niż na 32-bitowym procesorze CISC z tuzinem trybów adresów pamięci.