2012-12-06 164 views
-1

我想将文件反编译为(/将它们读取为)原始二进制代码。我没有发现任何关于此事的信息。它甚至有可能吗?它必须是为了让电脑运行它,但有些操作系统可能不允许读取它。将一个文件“反编译”为原始二进制代码

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

+7

呃。什么?所有文件都以原始二进制代码形式存储。没有“反编译”可以完成。 –

+0

你的意思是阅读大会?试试'objdump -d' – Collin

+0

听起来像你需要Nabob压缩工具! –

回答

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形式显示。我会把这个作为练习留给读者。

相关问题