
私が理解したところ、コンパイラはCPUが読み取ることができる1と0のバイナリファイルを生成します。バイナリファイルがありますが、その中の1と0を見るにはどうすればよいですか?テキストエディタで開くことができないと言われています...
PS:アセンブリコンパイルバイナリがあります。 1と0の純粋なバイナリコードでなければなりませんか?
答え1
答え2
多くの人がこの質問のいくつかの側面に答えましたが、すべてではありません。
コンピュータ上のすべてのファイルは1と0として保存されます。画像、テキストファイル、音楽、実行可能アプリケーション、オブジェクトファイルなど
それらはすべて0と1です。唯一の違いは、何を開くかによって異なるように解釈されることです。
cat
以下を使用してテキストcat
ファイルを表示するとき
画像ビューアを使用してファイルを表示すると、ファイルの種類といくつかのロジックに基づいて、すべての1と0が画像に変換されます。
コンパイルされたバイナリは変わらず、1と0で保存されます。
arzyfexの答えは、これらのファイルをさまざまな方法で表示するためのツールを提供しますが、バイナリ形式でファイルを読むことは、8進数、16進数、またはASCII形式でファイルを表示するのと同じように、コンピュータ上のすべてのファイルで機能します。どんな場合でも言葉ではありません。
実行可能なバイナリが何をしているのかを理解するには、アセンブリ言語を表示するように(最初に)これを表示する必要があり、次のコマンドを使用して表示できます。
objdump -d /path/to/binary
これはバイナリコンテンツを取得し、それをアセンブラ(非常に低いレベルのプログラミング言語)に変換する逆アセンブラです。 objdump
デフォルトでは常にインストールされるわけではないため、Linux環境によってはインストールが必要になる場合があります。
外部読書。
注:@Wildcardが指摘したように、これらのファイルには以下が含まれていないことに注意することが重要です。数値1と0(画面に見られるように)には、オン(1)またはオフ(0)の個々の情報ビットである実際のデジタルデータが含まれています。この説明さえも真実に対する近似値にすぎません。重要なのは、1と0を表示するビューアを見つけた場合、ファイルのデータをまだ解釈していても、0と1のASCII文字を表示することです。データはバイナリ形式で保存されます(上記のバイナリリンクを参照)。 Pierre-Olivierのコミュニティウィキエントリこれをより詳細に説明する。
答え3
低レベルでは、ファイルコード化0と1の順序で。
しかし、プログラマでさえ実際にそこに行くことはほとんどありません。
最初(0と1の物語よりも重要なことは)コンピュータが動作するすべては0と1を使用して実行されることを理解する必要があります。数字。
文字は、文字セット表を使用して数値としてエンコードされます。たとえば、ASCIIエンコーディングを使用すると、文字「A」の値は65です。バラよりhttp://www.asciitable.com
ピクセルは1つ以上の数字でエンコードされます(さまざまなグラフィック形式があります)。たとえば、標準の3色フォーマットでは、黄色のピクセルは赤の場合は255、緑の場合は255、青の場合は0としてエンコードされます。バラよりhttp://www.quackit.com/css/css_color_codes.cfm(色を選択してR、G、Bセルを表示)
バイナリ実行可能ファイルはアセンブリとして作成され、各アセンブリ命令は数字でエンコードされます。たとえば、組み立て手順は
MOVB $0x61,%al
176,97という2つの数字でエンコードされます。http://www.sparksandflames.com/files/x86InstructionChart.html(16進表記が使用されるため、各命令には00からFFまでの関連数字があります。以下を参照)
第二:各数字には複数の数字を含めることができます氏名またはシンボル。
リンゴが23個あるとしましょう。
- 10個のリンゴをグループに分けると、10個のリンゴからなる2つのグループと3つの個別のリンゴが得られます。これが私たちが23と書くときに意味するものです:最初は2(10)、次に3(日)です。
でもリンゴ16個セットもできますよ。だから私は16と7つの個々のリンゴのグループを取得します。存在する16進数表記法(これは基本16と呼ばれます)、私は次のように書きます:17(16 + 7)。 10進表記と区別するために、16進表記は通常17h、#17、または$ 17などの接頭辞または接尾辞で表されます。しかし、9つ以上の16のグループまたは9つ以上の個々のリンゴをどのように表現できますか?簡単に言えば、A(10)からF(15)までの文字を使用します。数字31(例えば、リンゴ31個)は16進数で#1Fとして表示されます。
同じ行から2つのリンゴグループを作成できます。 (そして2つのリンゴグループ、2x2リンゴグループなど)。したがって、23は2x2x2x2リンゴグループ1個、2x2x2リンゴグループ0個、2x2リンゴグループ1個、リンゴ2個グループ1個、リンゴ1個、二進数で10111と表示されます。
(望むよりhttps://en.wikipedia.org/wiki/Radix)
物理的に2つの状態(切り替え)を可能にするメカニズムは、ディスクとメモリストレージの両方で簡単に実装できます。
これがデータとプログラムが数値として扱われ、バイナリ形式で作成され操作される理由です。
その後、データ型に応じて適切な形式(文字A、黄色のピクセル)に変換または実行(MOVコマンド)されます。
hexdump
データ(またはアセンブラ)をエンコードする数値を16進形式で一覧表示します。その後、電卓を使用して対応するバイナリ形式を取得できます。
答え4
一連の16進値で表される16進エディタで開くことができます。xxd file
何を達成したいですか?