-1

我想将文件反编译成(/读为)原始二进制代码。我还没有找到任何关于它的东西。甚至可能吗?它必须是为了让计算机运行它,但某些操作系统可能不允许读取它。

编辑:让我们明确答案。我想从(例如)一个 .txt 文件开始,并以 0 和 1 的数组结束

4

1 回答 1

2

存储在 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

十六进制数字和显示的字符是保存数据,只是格式不同。没有“反编译”步骤或类似的东西。此时剩下要做的就是将此数据存储在 a 之类的某个地方vector<char>,并且可能重新格式化输出,以便它以二进制而不是十六进制或 ASCII 显示这些值。我将把它作为练习留给读者。

于 2012-12-06T16:15:34.283 回答