Cat
為什麼“cat a.out”的輸出是一些奇怪的文本,而不是二進制?
我們都知道“a.out”是用於表示目標程式碼(二進制)的文件格式,是彙編輸出的縮寫形式,那麼
cat a.out
也應該給我們二進制,但為什麼不會發生這種情況呢?我期望輸出是純二進制的,我的意思是只有 1 和 0。
編譯後的程式碼只是一個(通常相當長的)字節序列。如果你
cat
有這樣的文件,終端會嘗試在 ASCII/UTF8/UTF16 中顯示具有相同字節值的字元。對於大多數字節組合,這都失敗了,所以結果cat a.out
看起來像亂碼。使用十六進制查看二進制值
$ od -x a.out 0000000 facf feed 0007 0100 0003 8000 0002 0000 0000020 000f 0000 04b0 0000 0085 0020 0000 0000 0000040 0019 0000 0048 0000 5f5f 4150 4547 455a 0000060 4f52 0000 0000 0000 0000 0000 0000 0000 0000100 0000 0000 0001 0000 0000 0000 0000 0000 ...
或者,如果您的系統上有它,
$ hexdump -C a.out 00000000 cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00 |................| 00000010 0f 00 00 00 b0 04 00 00 85 00 20 00 00 00 00 00 |.......... .....| 00000020 19 00 00 00 48 00 00 00 5f 5f 50 41 47 45 5a 45 |....H...__PAGEZE| 00000030 52 4f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |RO..............| 00000040 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................| ... 00000f90 00 00 00 41 53 ff 25 65 00 00 00 90 68 00 00 00 |...AS.%e....h...| 00000fa0 00 e9 e6 ff ff ff 48 65 6c 6c 6f 2c 20 57 6f 72 |......Hello, Wor| 00000fb0 6c 64 21 0a 00 00 00 00 01 00 00 00 1c 00 00 00 |ld!.............| 00000fc0 00 00 00 00 1c 00 00 00 00 00 00 00 1c 00 00 00 |................| ...