Мне стало интересно, как я могу получить доступ к ячейкам памяти жесткого диска или другого носителя, например, USB flash накопителя с помощью языка C, что-то вроде "0xffffff = a".
Я уже минут 30 копаюсь в интернете и ничего пока не нашел. Как-то же пишут низкоуровневые программы для восстановления файлов, например.
Я понимаю, что во многом еще ничего не понимаю, но думаю, что у вас есть хоть какое-то понимание вопроса.
читать и писать напрямую в /dev/sd* и иже с ними :) глубже смысла большого нет.
дальше начинается драйверные заморочки, которые могут быть уникальны для каждого носителя.
плюс все равно напрямую к "железным" секторам все равно доступ не получишь. сейчас даже в носителе есть прослойка абстракции от железа. через нее, к примеру, перемапливают сбойные сектора в винчестерах или распыляют нагрузку записи по разным ячейкам в флешках и т.д. и т.п.
пишут ребята, которые упорно изучали низкоуровненвые операции в течении долгих лет, которые закупали документацию у производителей, которые нарабатывали кучу опыта из прикладных проблем, которые убили кучу железа в экспериментальных тестах и т.д. и т.п.
В общем то все абстракция. Причём ос это не первый уровень. Вы отсылаете сигнал и драйвер что то делает или не делает. Формально вы можете нырнуть чуть ниже ос, но контроллер может это принять или нет.