Cat

為什麼“cat a.out”的輸出是一些奇怪的文本,而不是二進制?

  • July 20, 2018

我們都知道“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  |................|
...

引用自:https://unix.stackexchange.com/questions/457449