【问题标题】:"Decompile" a file into raw binary code将文件“反编译”为原始二进制代码
【发布时间】:2012-12-06 13:50:27
【问题描述】:

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

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

【问题讨论】:

  • 呃。什么?所有文件都存储为原始二进制代码。无需进行“反编译”。
  • 你的意思是阅读汇编?试试objdump -d
  • 听起来你需要 Nabob 压缩工具!
  • 向我们展示一个您想要“反编译”的文本文件示例。
  • 一个例子? “Hello World”->(“反编译”)-> 0111010100101010...

标签: c++ binary decompiler


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多