То, что вы видите, представляет собой ASCII-представление определенного битового шаблона, который часто встречается в исполняемых программах, генерируемых этим конкретным компилятором. Шаблон может соответствовать определенной последовательности инструкций машинного языка, которые компилятор любит испускать. Или это может соответствовать определенной структуре данных, которую компилятор или компоновщик использует для маркировки различных других частей данных, хранящихся в исполняемом файле. для вашего C-кода и вашей конкретной версии вашего конкретного компилятора, именно то, чему соответствуют битовые комбинации []A\A]A^A_
и ;*3$"
Но я больше не занимаюсь программированием на машинном языке, поэтому я не собираюсь пробовать, и ответы, вероятно, в конце концов не будут слишком интересными.
Но это напоминает мне омаленькая причуда, которую я заметил и могу объяснить. Предположим, вы написали очень простую программу
int i = 12345;
Если вы скомпилировали эту программу и запустили на ней strings
, и если вы сказали ей искать строки длиной не более двух символов,вы, вероятно, увидите (среди множества других коротких, бессмысленных строк) строку
90
и этот битовый шаблон, фактически, будет соответствовать вашей переменной! Что с этим?
Что ж, 12345 в шестнадцатеричном формате это 0x3039
, и большинство машин в наши дни имеют младший порядок, поэтому эти два байта в памяти хранятся в другом порядке как
39 30
и в ASCII 0x39
- это '9'
, а 0x30
- '0'
.
И если вам это интересно, вы можете попробовать скомпилировать фрагмент программы
int i = 12345;
long int a = 1936287860;
long int b = 1629516649;
long int c = 1953719668;
long long int x = 48857072035144;
long long int y = 36715199885175;
и запустив на нем strings -2
, и посмотрите, что еще у вас получится.