2012-12-06 162 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形式顯示。我會把這個作爲練習留給讀者。

相關問題