16進エディタでEXEを開くと、さまざまなものが表示されるのはなぜですか。コンピューターがバイナリのみを理解する場合、ファイルに表示される可能性のある記号は2つだけではないでしょうか。ありがとう
8 に答える
コンテンツと表現を混同しています。コンピューター上のすべてのファイルは、バイナリ(1と0)で表すことができます。実際、このようにして、通常、ディスク(磁性粒子の整列)またはRAM(充電)に保存されます。
16進数を使用してコンテンツを表す「16進エディタ」でexeを表示しています。これは、バイナリよりも16進数を理解してナビゲートする方が簡単であるためです(「FA」と「11111010」を比較してください)。
したがって、16進記号「C0」は、2進数の「11000000」、「C1」==「11000001」、「C2」==「11000010」などと同じ値を表します。
16進値は、メモリ内の2進値として解釈されます。このソフトウェアは、人間が少し読みやすくするだけです。
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = 10 A
1011 = 11 B
1100 = 12 C
1101 = 13 D
1110 = 14 E
1111 = 15 F
コンピュータはバイナリを理解するだけでなく、それは誤解です。非常に低い、最も低い、最も低いレベルでは、はい、デジタルコンピュータのデータは一連の1と0です。しかし、コンピュータのCPUは、これらのビットをバイト、ワード、dword、qwordなどにグループ化します。最新のCPUが扱う基本単位は、ビットではなく、dwordまたはqwordです。そのため、32ビットまたは64ビットプロセッサと呼ばれています。それらを単一のビットで動作させたい場合は、31または63の無関係なビットを含めることになります。(フラグレジスタを扱い始めると、少しぼやけます。)
デジタルコンピュータは、8ビットプロセッサの時点で実際に独自のものになりました。したがって、16進数は、2文字で1バイト(8ビット)を簡潔に表すため、非常に便利な表示形式になりました。16進エディタを使用しているため、16進が表示されます。また、この初期のバイト指向により、8ビットごとに2文字が表示されます。ただし、これは主に表示用のものです。ファイルシステムは通常、実際のデータのバイト粒度(およびストレージ割り当て粒度のはるかに大きなチャンク-ほとんどの場合4k)で動作しますが、4ビットごとに1文字または16ビットごとに4文字を表示できない理由はほとんどありません。以上)。
画面に表示されているこの文字A
は、1と0で構成されたパターンです。これが、すべての1と0を画面に表示するパターンを理解できるようにする、すべての標準によって私たち全員が協力する方法です。
文字A
の値は65にすることができます。バイナリではこれはです0100 0001
が、画面上ではパターンである可能性があります
##
# #
####
# #
# #
exeファイルには、さまざまな形式、浮動小数点数、整数、文字列で多くのものが保存されます。これらの形式は、さらに変換することなくコンピューターで直接簡単に読み取ることができるため、よく使用されます。16進エディタでは、多くの場合、exeファイルに保存されている文字列を読み取ることができます。
コンピューターではすべてがバイナリ
ファイル内の各文字(バイト)は8ビット(8つの1または0)を表します。ビットは表示されません。バイト(およびより大きなタイプ)が表示されます。
考えられる状態は2つだけです。あなたが見ているのは、それらの組み合わせのより大きなパターンです。これは、文が文字と句読点だけで構成されているのとほぼ同じです。
ですので、ここでは素人回答をさせていただきます。上記で他の人が示唆したことは正しいです.16進数表現でバイナリを読み取ることができます. とにかく、ほとんどのデータはラウンド数のバイトで保存されます。たとえば、圧縮アルゴリズムが奇数ビット数で圧縮表現を計算する可能性がありますが、それを保存するために完全なバイトにパディングします。また、各バイトは 8 ビットまたは 2 桁の 16 進数で表すことができます。
しかし、これはあなたが尋ねたものではないかもしれません。おそらくバイナリデータの中にいくつかのASCIIデータが見つかりました。なんで?ええと、コードは実行するためだけのものではない場合があります。コンパイラには、コードがクラッシュしてスタック トレースにアクセスする必要が生じた場合にデバッグに役立つ、人間が読み取れるデータが含まれていることがあります。変数名、行番号など。
私がそうしなければならなかったわけではありません。コードにバグはありません。それは正しい。
オペレーティングシステムとディスクファイルシステムについては忘れないでください。それらはそれらのフォーマットのファイルのみを使用することができます。たとえば、win32の実行可能ファイルはPEヘッダーで始まる必要があります。オペレーティングシステムは、メモリと転送制御にexutableをロードし、exutableにAPI命令を並べ替えます...低レベルの命令はCPUによって実行されます。そのレベルの命令は、すでにバイトのセットである可能性があります。