将文件“反编译”为原始二进制代码

时间:2012-12-06 13:50:27

标签: c++ binary decompiler

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

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

1 个答案:

答案 0 :(得分: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

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