Другие языки программирования и технологии

как устроен бинарный файл

привет знающим, скажите пожалуйста как устроено бинарный файл, конкретно меня интересует два вопроса, почему при открытий текстовым редактором .exe файла не видно двоичного кода? как я знаю exe файл это двоичный код (исключим .net framework c#) .
ещё ,как делаются бинарные форматы файла? почему например xml файл возможно почитать а gif нельзя? в xml файле записаны слова обычные, а что в бинарном формате содержится? какие данные? в каком формате ?
я новичок, знаю только html,css,php и c# учусь и заранее интересно
Файл - поименованная последовательность байтов, созданная для определённой цели и имеет определённый формат. Данный формат распознаётся программами, которые интерпретируют данную последовательность в зависимости от своей функциональности.
Формат символьного файла (упрощёно) - байты имеют значение от 32 до 127 (остальные - т. н. "непечатные" до 32 и расширенные от128 до 255, зависят от кодовой страницы) , состоящие из строк, которые ограничиваются зарезервированной последовательностью байт (из числа непечатных символов) . Символьный редактор ставит в соответствие байту отображение символа на мониторе
Формат растрового файла имеет заголовок с описанием (метаинформацией) и матрицу растра. некоторые форматы содержат индексную таблицу цветов (палитру) . Граф вьюер ставит в соответствие код элемента матрицы триаде цветов RGB из палитры и отображает его на мониторе.
Формат исполняемого файла - опять же свой, формат текстур - свой, научный hdf - свой и т. д. Смысл программы - отразить файл в удобном для восприятия (человеком или обработчиком) виде. Если файл не соответствует программе, то она не сможет его правильно интерпретировать.
Ещё раз - определены подмножества файлов и программ их читающих. Некоторые подмножества пересекаются.
Алексей Лаптев
Алексей Лаптев
78 409
Лучший ответ
ну примерное вот так
Леха Гурьянов спасибо но меня интересует, что в бинарном файле содержится? факт что это не обычные буквы и цифры, как в обычном текстовом файле ...как создаются бинарные файлы ?
Так, как захотел его автор. Бинарный - означает только, что там не текст, и в обычном текстовом редакторе открывать его бессмысленно, а не какой-то конкретный формат.
Леха Гурьянов это понятно но, что в нем хранится то? если в текстовом, обычным способом (имею ввиду программный способ) пишем какие то данные, будут это буквы, цифры или знаки, как в бинарных создают то? хоть принцип создания какой скажите
Короче, чтобы понять, что где и как хранится, по-моему, нужно попробовать сконструировать компьютер самому. Хотя бы мысленно. Итак, договоримся заранее: наш воображаемый компьютер будет оперировать числами. Во-первых, исторически так сложилось, что копьютеры выросли из арифмометров, во-вторых, занумеровать в нашем мире можно всё. Или почти всё.

В компьютере должен быть процессор и память. Память можно представить себе как длинную ленту из пронумерованных ячеек для хранения чисел:
[число] [число] [число]. . .

Процессор - чудо инженерии, которое работает с этими ячейками памяти. Процессору понадобятся: ссылка на ячейку (для доступа к памяти) и система команд. Какая система команд? Например:
1) взять число из текущей ячейки и прибавить его к числу в ячейке N
2) взять число из текущей ячейки и отнять его от числа в ячейке N
3) скопировать число из текущей ячейки в ячейку N
4) поместить в текущую ячейку число N
5) переместить указатель на ячейку N
Как видим для описания любой команды достаточно двух чисел: номер команды, число N

С этим уже можно писать простейшие программы. Например:
5 1 - { поместили указатель на ячейку 1 }
4 23 -{ в ячейку 1 поместили число 123 }
5 2 -{ поместили указатель на ячейку 2 }
4 56 -{ в ячейку 2 поместили число 456 }
1 1 -{ просуммировали с ячейкой 1 число из ячейки 2 }
3 10000 -{ поместили резултьтат в ячейку 10000 }

Кстати, раз команды - это тоже числа, то можно хранить их в той же памяти. А можно и завести под команды отдельную память. Главное - для выполнения программы процессору потребуется ссылка на ячейку, откуда считывать очередную команду. А чтобы в программе можно было устраивать ветвления, дополним систему команд нашего воображаемого процессора следующей:
6) если значение текущей ячейки - ноль, то сдвинуть "командную ссылку" на ячейку с номером N

Теперь у нас получился полноценный компьютер. Если мы заполнили его память числами, поставили патефонные иголки ссылок на нужные ячейки и запустили агрегат, то он начнет скакать по памяти, что-то в ней изменяя и обновляя. Этого достаточно для расчетов, но человечество лениво. Ему неохота копаться в памяти, чтобы понять, где там что насчиталось. Поэтому оно придумало видеоадаптер.

Будем считать, что видеоадаптер - это некий прибор, пробегающий с огромной частотой по какой-то заранее оговоренной области памяти нашего воображаемого компьютера, и рисующий в телевизоре на соответствующих позициях некие узоры.
Вот, в нашем примере: если "видеопамять" начинается с ячейки 10000, то видеоадаптеру надо как-то отразить тот факт, что в начальной ячейке подконтрольной ему памяти появилось число 79.

Он не заморачивается. У него где-то припасена таблица символов, и он знает, что наткнувшись на число 79 надо подсветить пикселы в таком порядке:
-0000-
0-----0
0-----0
0-----0
-0000-
Пораженный пользователь на экране видит букву "О". Итак, используя видеоадаптер на экране можно наблюдать отражение мешанины чисел, хранящихся в видеопамяти. Иногда это отражение осмысленно, типа "ПРИВЕТ", иногда - просто хаотичный набор символов. Всё зависит от чисел в памяти компьютера.

Осталось малое - вообразить себе запоминающее устройство, "жесткий диск", которое может хранить произвольные участки нашей памяти в виде поименованных областей. Например файл с нашей программой:
"5 1 4 23 5 2 4 56 1 1 3 10000"
Теперь понятно, что такое файлы. Это просто некоторые цепочки чисел. Числа можно интерпретировать как команды, как исходные данные для таблицы символов, как дамп памяти т. п. Некоторые файлы, например, xml и txt содержат числа, которые "видеоадаптером" превращаются в визуально понятный человеку текст. Некторые, например, exe - это набор команд, который имеет смысл лишь для процессора, а некторые, например, gif - это данные, предназначенные для обработки другими программами.
Roman Ivanov
Roman Ivanov
24 825
будешь удивлён: в двоичный код кодируется ВСЯ информация в компьютере.
открывая .exe файл тектовым редактором, он интерпретирует двоичные данные как текст, а не как программу.
Заходим сюда http://webhex.net выбираем файл (у себя на компьютере) , нажимаем кнопку "Upload" - загружаем, наблюдаем.
Игорь Мельник
Игорь Мельник
1 221
В компьютере данные хранятся байтах, все файлы, текстовые ли, программные ли (типа exe), музыка, картинки. . .Все храниться в в формате из 4-х 8-ми разрядных цифр (так называемое байтовое слово) . .
В том числе и текст.
Просто программа проигрыватель (просмотрщик) или операционная система (для exe файлов) по определенному алгоритму переводить эти цифровые коды в нужную информацию. Например для текстовых файлов программа -текстовый редактор, сверяет цифровой код записанный в памяти со специальной таблицей (ASCII код) и выводит на экран текст. Любой файл можно открыть в специальных шестнадцатеричных редакторах (например WinHex). И увидеть его байт код.

P.S. Сразу отвечу на вопрос: почему при открытий текстовым редактором .exe файла не видно двоичного кода?
Просто потому что формат исполняемого файла не содержит символов из таблиц символов. Как следствие текстовый редактор не может понять что в данном файле. И как следствие отобразить он ничего не может (в лучшем случае покажет чушь)) .
Леха Гурьянов в случае открытия вижу не байт код, а шестнадцатеричный код, почему? ещё такой нубский вопрос, почему же тогда нельзя декодировать (расшифровать) всю программу, то есть раскрыть программу полностью как это делает ОС, ОС же знает что программа хочет от него, другими словами, как узнать секретную информацию который скрывает от нас программа? допустим создали простую программу, который просить ввести пароль и проверяет пароль на правильность с помощью явного проверки IF оператором, мы сможем узнать этот пароль если оно храниться в переменное ?
4еаупвапукйпа
Леха Гурьянов ответ после несколько секунд, сразу понял херню какую то напишете, достали уже ...