「cat a.out」の出力がバイナリではなく奇妙なテキストであるのはなぜですか? [コピー]

「cat a.out」の出力がバイナリではなく奇妙なテキストであるのはなぜですか? [コピー]

"a.out"がオブジェクトコード(バイナリ)を表すために使用されるファイル形式であり、アセンブラ出力の短い形式であることはすべて知っているので、バイナリも提供する必要がありますが、cat a.outなぜこれが起こらないのでしょうか?

私は出力が純粋なバイナリであると期待しています。つまり、1と0のみを意味します。

ベストアンサー1

コンパイルされたコードは(通常はかなり長い)バイトシーケンスです。これらのファイルを使用すると、cat端末はASCII / UTF8 / UTF16内で同じバイト値を持つ文字を表示しようとします。ほとんどのバイトの組み合わせでは失敗するため、結果はcat a.out横説説のように見えます。

16進数として使用されるバイナリ値の表示

$ 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  |................|
...

おすすめ記事