Я хочу декомпилировать файлы в (/ читать их как) сырой двоичный код. Я не нашел ничего об этом. Это вообще возможно? Это должно быть для того, чтобы компьютер запускал его, но некоторые ОС могут не разрешать его читать.
РЕДАКТИРОВАТЬ: позволяет очистить ответ. Я хочу начать с (например) файла .txt и закончить массивом из 0 и 1
Файлы, хранящиеся в файловых системах операционных систем, таких как Windows и Linux, не нужно «декомпилировать» так, как вы думаете. Они уже хранятся в виде двоичных данных.
Все, что вам остается сделать — это просто прочитать файл, но вам нужно использовать правильный инструмент.
Если вы используете что-то вроде потокового ввода-вывода для чтения файла с помощью потоковых манипуляторов, вы должны учитывать, что потоковые манипуляторы предназначены для отформатированные 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. Я оставлю это в качестве упражнения для читателя.
Других решений пока нет …