Отже, якщо я все правильно зрозумів
Не зовсім.
Це двійковий файл, і його дані незрозумілі для нас, людей
Зазвичай двійковий файл незрозумілий людині та машині, особливо коли мета файлу невідома. Зауважте, що не всі бінарні файли - це виконувані файли. Дуже багато бінарних файлів - це файли даних, які не містять інструкцій на машині. Ось чому розширення файлів використовуються при іменуванні файлів (в деяких ОС). The. com розширення використовувалося CP / M для позначення виконуваного файлу. The. розширення EXE додано MS-DOS для позначення іншого файлу, що виконується. * nixes використовує атрибут Execute для позначення файлів, які можна виконати, хоча це може бути як сценарій, так і код.
Як уже згадували інші, бінарні файли, що містять числа, повинні переглядатися шістнадцятковим дамп-програмою або шестигранним редактором, а не переглядачем тексту.
є приклад вмісту програми ping.exe
Цей файл насправді є переїзною програмою, і не всі дані у цьому файлі представляють машинний код. Існує інформація про програму, наприклад, які динамічні бібліотеки їй потрібні, які підпрограми повинні бути пов'язані, вимоги до стеку та пам'яті програми та даних та точку входу програми. Операнди адрес у файлі можуть бути відносними значеннями, які потрібно обчислити до абсолютних значень, або посиланнями, які потрібно вирішити.
"Програмний файл", про який ви, мабуть, думаєте, називається двійковим файлом зображень або дампом програмної пам'яті. Такий файл містив би лише машинний код та дані з усіма посиланнями на адресу, правильно встановлені для виконання.
навіть якщо вони знають код складання (найнижчий рівень машинної мови.)
Мова складання не є такою ж, як машинна мова . Типовий (як для виключення комп'ютерів мови високого рівня) процесор приймає машинний код як вхід, по одній інструкції за раз. Операнди - це регістри або адреси чисельної пам'яті. Мова складання - мова вищого рівня, яка може використовувати символьні мітки для розташування інструкцій та змінних, а також замінювати числові оп-коди мнемонікою. Програма мови складання повинна перетворитись на машинну мову / код до того, як вона фактично може бути виконана (як правило, утилітами, що називаються ассемблер, лінкер та завантажувач).
Зворотна операція, демонтаж, може бути виконана на програмних файлах з деяким успіхом і втратою символічної інформації. Розбирання дамп-пам'яті пам'яті або файлу програмного зображення - це більше проб і помилок, оскільки місця розташування коду та даних потрібно визначати вручну.
До речі, є люди, які можуть читати та кодувати (числовий) код машини. Звичайно, це 8-бітний процесор чи мікроконтролер набагато простіше, ніж 32-бітний процесор CISC з десятками режимів адреси пам'яті.