Я просто экспериментирую, но нашел феномен, который я был бы очень признателен, если бы кто-то мог попытаться объяснить.
Я пишу простую программу Hello World на C. Используйте gcc
чтобы скомпилировать эту программу в hello
исполняемый файл Unix и запустить ее с помощью ./hello
. Ухоженная.
Я открываю этот hello
файл, чтобы увидеть серию из 4-х символьных сегментов (если кто-то захочет добавить техническое описание того, что я здесь вижу, я бы не стал жаловаться).
У меня вопрос: почему, когда я копирую и вставляю все эти шестнадцатеричные сегменты в отдельный файл, давайте назовем test
и использую chmod +x test
, я не получаю те же результаты при запуске ./test
как при запуске ./hello
?
Вот моя C программа:
#include <stdio.h>
int main(void)
{
int a;
a = 5;
printf("Memory address: %p\n", (void*) &a);
return 0;
}
затем компилируется в (только первые 20 строк ...)
cffa edfe 0700 0001 0300 0080 0200 0000
1000 0000 1005 0000 8500 2000 0000 0000
1900 0000 4800 0000 5f5f 5041 4745 5a45
524f 0000 0000 0000 0000 0000 0000 0000
0000 0000 0100 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 1900 0000 2802 0000
5f5f 5445 5854 0000 0000 0000 0000 0000
0000 0000 0100 0000 0010 0000 0000 0000
0000 0000 0000 0000 0010 0000 0000 0000
0700 0000 0500 0000 0600 0000 0000 0000
5f5f 7465 7874 0000 0000 0000 0000 0000
5f5f 5445 5854 0000 0000 0000 0000 0000
300f 0000 0100 0000 3800 0000 0000 0000
300f 0000 0400 0000 0000 0000 0000 0000
0004 0080 0000 0000 0000 0000 0000 0000
5f5f 7374 7562 7300 0000 0000 0000 0000
5f5f 5445 5854 0000 0000 0000 0000 0000
680f 0000 0100 0000 0600 0000 0000 0000
680f 0000 0100 0000 0000 0000 0000 0000
Я копирую этот файл точно так же, как использую текстовый редактор.
Глядя на это с помощью diff
, я понимаю, что есть двоичная разница?
выполняется ./test
возвращает: (снова первые 20 строк)
./test: line 1: cffa: command not found
./test: line 2: 1000: command not found
./test: line 3: 1900: command not found
./test: line 4: 524f: command not found
./test: line 5: 0000: command not found
./test: line 6: 0000: command not found
./test: line 7: 0000: command not found
./test: line 8: 5f5f: command not found
./test: line 9: 0000: command not found
./test: line 10: 0000: command not found
./test: line 11: 0700: command not found
./test: line 12: 5f5f: command not found
./test: line 13: 5f5f: command not found
./test: line 14: 300f: command not found
./test: line 15: 300f: command not found
./test: line 16: 0004: command not found
./test: line 17: 5f5f: command not found
./test: line 18: 5f5f: command not found
./test: line 19: 680f: command not found
./test: line 20: 680f: command not found