Почему EXE не в двоичном формате?

Почему, если вы откроете EXE в шестнадцатеричном редакторе, вы увидите все виды вещей. Если компьютеры понимают только двоичный файл, то не должно быть только 2 возможных символов, видимых в файле? Спасибо

8 ответов


шестнадцатеричные значения интерпретируются двоичными значениями в памяти. Программное обеспечение только делает его немного более читаемым для людей.

0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = 10 A
1011 = 11 B
1100 = 12 C
1101 = 13 D
1110 = 14 E
1111 = 15 F


вы путаете контент с представлением. Каждый файл на вашем компьютере может быть представлен двоичным (1s и 0s), и действительно, именно так он обычно хранится на диске (выравнивание магнитных частиц) или ОЗУ (заряд).

вы просматриваете свой exe с помощью "шестнадцатеричного редактора", который представляет содержимое с помощью шестнадцатеричные числа. Он делает это, потому что легче понять и перемещаться по шестнадцатеричным, чем двоичным (сравните " FA " с "11111010").

таким образом, шестнадцатеричный символ "C0" представляет то же значение, что и двоичный "11000000", "C1" == "11000001", "C2" == "11000010" и так далее.


компьютеры не только понять двоичный файл, это неправильное представление. На очень низкой, низкой, низкой уровень, да, данные в цифровых компьютерах-это серия 1s и 0s. Но компьютерные процессоры группируют эти биты вместе в байты, слова,dwords, qwords, etc. Основной блок, с которым имеет дело современный процессор, - это dword или qword, а не бит. Вот почему они называются 32-разрядными или 64-разрядными процессорами. Если вы хотите заставить их работать с одним битом, вы довольно многое в конечном итоге включает в себя 31 или 63 посторонних бита. (Он становится немного размытым, когда вы начинаете иметь дело с регистрами флагов.)

цифровые компьютеры действительно пришли в свои собственные 8-битные процессоры, поэтому шестнадцатеричный стал очень полезным дисплей формат, поскольку он кратко представляет байт (8 бит) в двух символах. Вы используете HEX-редактор, поэтому он показывает вам hex, и из-за этой ранней байтовой ориентации он показывает вам два символа на каждые 8 бит. Это в основном тем не менее, есть небольшая причина, по которой он не может показать вам один символ на каждые 4 бита или четыре символа на каждые 16 бит, хотя файловые системы обычно работают с гранулярностью байтов для фактических данных (и намного, намного большие куски для гранулярности распределения хранилища-почти всегда 4k или более).


этот персонаж A вы видите здесь на экране просто шаблон, состоящий из единиц и нулей. Это как мы все сотрудничаем по всем стандартам, которые делают все единицы и нули делая узоры на понятный экран.

символ A может иметь значение 65. В двоичном формате это 0100 0001 но на экране это может быть шаблон

   ##
  #  #
  ####
  #  #
  #  #

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

в компьютере все двоично


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


каждый символ (байт) в файле представляет 8 бит (8 единиц или нулей). Вы не видите биты, вы видите байты (и большие типы).


поэтому я собираюсь дать непрофессионалу ответ здесь. То, что другие предложили выше, правильно, вы можете читать двоичный файл через шестнадцатеричное представление. В любом случае большинство данных сохраняется в круглом количестве байтов. Возможно, что, например, алгоритм сжатия вычисляет сжатое представление в некотором нечетном количестве битов, но он все равно будет заполнять его до полного байта, чтобы сохранить его. И каждый байт может быть представлен как 8 бит или 2 шестнадцатеричных цифр.

но это может быть не то, что вы спросили. Скорее всего, вы нашел некоторые данные ascii внутри предположительно двоичные данные. Почему? Ну, иногда код не только для бега. Иногда компиляторы включают некоторые биты читаемых человеком данных, которые могут помочь отладке, если код был для сбоя и вам нужно было получить доступ к трассировке стека. Такие вещи, как имена переменных, нумерацию строк и т. д.

Не то, чтобы мне когда-либо приходилось это делать. У меня нет ошибок в коде. То право.


Не забывайте об операционной системе и файловой системе диска. Они могут использовать только файлы в своих форматах. Например, исполняемые файлы в win32 должны начинаться с заголовка PE. Операционная система загружает exutable в память и управление передачей, сортирует api-инструкции в exutables и так далее...Инструкции низкого уровня выполняются процессором, для этого уровня инструкции уже могут быть наборами байтов.