Seu disco rígido é apenas um dispositivo que pode conter bytes . No nível do hardware, não há conceito de arquivos ou mesmo partições, apenas bytes [1] .
Agora estamos apresentando um conceito de partições (confira a Introdução aqui se você quiser saber por quê). Há uma tabela de partições que também é um monte de bytes. Eles não fazem sentido a menos que você saiba como interpretá-los. Todos os sistemas operacionais modernos usam tabelas de partições compatíveis com o MS-DOS [2] , para que elas possam reconhecer as partições umas das outras. Ainda assim, você pode fingir que não há partições, mas apenas bytes. Isso é o que o disco rígido contém.
Cada partição deve ser formatada em algum sistema de arquivos que descreva como os arquivos são salvos. As versões modernas do Windows usam o sistema de arquivos NTFS, as mais antigas foram baseadas na família FAT (FAT12, FAT16, FAT32) e as configurações Linux do consumidor geralmente usam ext família (ext2, ext3, ext4). O sistema de arquivos decide como os arquivos são dispostos na partição e onde o "índice" é (e como interpretá-lo). Novamente, são apenas bytes, a menos que você saiba como interpretá-los.
Arquivos podem ter metadados adicionais (nome, caminho, data de criação, data do último acesso etc.) Sistema de arquivos informa como os metadados devem ser armazenados e como você pode encontrar limites de arquivos, mas não como interpretar conteúdo do arquivo. Você tem que descobrir qual é o formato de arquivo (dica: veja as extensões de arquivo ou números mágicos !). Até você saber o formato, é apenas um monte de bytes.
Meu ponto é que não há mágica mais profunda por trás do armazenamento de arquivos. Existem muitos níveis de abstração envolvidos aqui, mas se o computador puder acessar a unidade em qualquer um deles, ele também poderá exibir ou editar dados nesse nível de abstração!
Programas como o Paint ou o Word operam no nível mais alto de abstração, eles interpretam os dados do arquivo de acordo com o formato . Mas editores hexadecimais não interpretam dados, eles param no nível arquivo e apresentam bytes brutos em formato hexadecimal (esse é o formato mais fácil de usar que você pode obter neste nível). Interpretando qualquer arquivo = interpretando seus bytes. É assim que executáveis são executados, arquivos de texto lidos ou imagens exibidas. Quando a CPU está executando um aplicativo, ele vê exatamente os mesmos dados que um editor hexadecimal apresentará a você. Quando você está abrindo um JPEG, o visualizador de imagens está lendo os mesmos dados que os editores hexadecimais mostram!
Parece que você está interessado em engenharia reversa. Existem algumas ferramentas (depuradores, descompiladores, desmontadores) que tornam esse processo menos doloroso. Trabalhar com bytecode é difícil, especialmente quando você está lidando com CPUs que usam instruções de tamanho variável (estou olhando para você, Intel!)
[1] Não realmente, mas vamos supor que, por uma questão de simplicidade. Se você estiver interessado em detalhes, as unidades antigas usaram o esquema CHS que foi substituído mais tarde por LBA .
[2] ... ou modernas GPTs que funcionam bem com UEFI , mas, novamente, não é tão importante, vamos ignorá-los. Ah, e as tabelas do MS-DOS são mais comumente chamadas de tabelas de partição MBR .