ファイルを生のバイナリ コードに逆コンパイル (/読み取り) したい。私はそれについて何も見つけていません。それは可能ですか?コンピューターがそれを実行するために必要ですが、一部の OS では読み取りが許可されていない場合があります。
編集:答えをクリアしましょう。(たとえば) .txt ファイルで開始し、0 と 1 の配列で終了したい
ファイルを生のバイナリ コードに逆コンパイル (/読み取り) したい。私はそれについて何も見つけていません。それは可能ですか?コンピューターがそれを実行するために必要ですが、一部の OS では読み取りが許可されていない場合があります。
編集:答えをクリアしましょう。(たとえば) .txt ファイルで開始し、0 と 1 の配列で終了したい
Windows や Linux などのオペレーティング システムのファイル システムに保存されているファイルは、皆さんが考えているように「逆コンパイル」する必要はありません。それらはすでにバイナリデータとして保存されています。
あとはファイルを読み取るだけですが、適切なツールを使用する必要があります。
ストリーム I/O のようなものを使用して、ストリーム マニピュレータを使用してファイルを読み取る場合、ストリーム マニピュレータはフォーマットされたI/O用であることを考慮する必要があります。しかし、フォーマットされた I/O ではなく、フォーマットされていない I/O が必要です。
この例を考えてみましょう。以下を含むファイルがある場合c:\temp\test.txt
:
こんにちは世界。
...そして、このコードを実行します:
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
ifstream f("c:\\temp\\test.txt", ios_base::binary|ios::in);
for( char c = 0; f.get(c); )
{
cout << c << "\t" << "0x" << hex << static_cast<int>(c) << endl;
}
}
出力は次のようになります。
H 0x48
e 0x65
l 0x6c
l 0x6c
o 0x6f
, 0x2c
0x20
w 0x77
o 0x6f
r 0x72
l 0x6c
d 0x64
. 0x2e
0xd
0xa
表示される 16 進数と文字はセーブ データであり、形式が異なるだけです。「逆コンパイル」ステップなどはありません。この時点でやるべきことは、このデータを のような場所に保存しvector<char>
、これらの値を 16 進数や ASCII ではなく 2 進数で表示するように出力を再フォーマットすることだけです。それは読者への演習として残しておきます。