Ваш жесткий диск - это просто устройство, которое может хранить байты. На аппаратном уровне нет понятия файлов или даже разделов, только байты [1].
Теперь мы вводим понятие разделов (проверить Введение здесь , если вы хотите знать , почему). Есть таблица разделов, которая также представляет собой набор байтов. Они не имеют смысла, если вы не знаете, как их интерпретировать. Все современные операционные системы используют таблицы разделов, совместимые с MS-DOS [2] , поэтому они могут распознавать разделы друг друга. Тем не менее, вы можете просто притвориться, что разделов нет, а есть только байты. Вот что держит жесткий диск.
Каждый раздел должен быть отформатирован в некоторой файловой системе, которая описывает, как файлы сохраняются. Современные версии Windows используют файловую систему NTFS, более старые были основаны на семействе FAT (FAT12, FAT16, FAT32), а установки Linux потребительского уровня обычно используют семейство ext (ext2, ext3, ext4). Файловая система решает, как файлы размещаются на разделе и где находится "оглавление" (и как его интерпретировать). Опять же, это всего лишь байты, если вы не знаете, как их интерпретировать.
Файлы могут иметь дополнительные метаданные (имя, путь, дата создания, дата последнего доступа и т.д.) Файловая система указывает, как должны храниться метаданные и как вы можете найти границы файлов, а не как интерпретировать содержимое файлов. Вы должны выяснить, что это за формат файла (подсказка: посмотрите на расширения файлов или магические числа !). Пока вы не знаете формат, это просто куча байтов.
Я хочу сказать, что за хранением файлов нет более глубокой магии. Здесь задействовано много уровней абстракции, но если компьютер может получить доступ к диску на любом из них, он также может позволить вам просматривать или редактировать данные на этом уровне абстракции!
Такие программы, как Paint или Word, работают на самом высоком уровне абстракции, они интерпретируют данные файла в соответствии с форматом. Но шестнадцатеричные редакторы вообще не интерпретируют данные, они останавливаются на уровне файлов и предоставляют вам необработанные байты в шестнадцатеричном формате (это самый удобный формат, который вы можете получить на этом уровне). Интерпретация любого файла = интерпретация его байтов. Так исполняются исполняемые файлы, читаются текстовые файлы или отображаются картинки. Когда процессор выполняет приложение, он видит те же данные, что и шестнадцатеричный редактор. Когда вы открываете JPEG, программа просмотра изображений читает те же данные, что и шестнадцатеричные редакторы!
Похоже, вы заинтересованы в обратном инжиниринге. Есть некоторые инструменты (отладчики, декомпиляторы, дизассемблеры), которые делают этот процесс менее болезненным. Работать с байт-кодом сложно, особенно когда вы имеете дело с процессорами, которые используют инструкции переменной длины (я смотрю на вас, Intel!)
[1] Не совсем, но давайте предположим, что ради простоты. Если вас интересуют подробности, то старые диски использовали схему CHS , которая впоследствии была заменена LBA.
[2] ... или современные GPT, которые хорошо работают с UEFI, но опять же, это не так важно, давайте просто их пропустим. Да, и таблицы MS-DOS чаще называют таблицами разделов MBR .