2012-12-06 3 views
-1

파일을 원시 바이너리 코드로 디 컴파일하려고합니다. 나는 그것에 대해 아무것도 발견하지 못했다. 심지어 가능할까요? 그것은 컴퓨터가 그것을 실행하기 위해서는 있어야하지만, 일부 OS는 그것을 읽을 수 있도록 허용하지 않을 수도 있습니다.파일을 원시 바이너리 코드로 "디 컴파일"

편집 : 답을 취소하십시오. .txt 파일로 시작하여 0과 1의 배열로 끝내기를 원합니다.

+7

Erm. 뭐? 모든 파일은 원시 2 진 코드로 저장됩니다. 수행 할 "디 컴파일"이 없습니다. –

+0

어셈블리를 읽으셨습니까? 'objdump -d'를 시도하십시오 – Collin

+0

Nabob 압축 도구가 필요한 것 같습니다. –

답변

2

Windows 및 Linux와 같은 운영 체제의 파일 시스템에 저장된 파일은 "디 컴파일"할 필요가 없습니다. 네가 생각하는 것처럼. 이미 이진 데이터로 저장됩니다.

당신이해야 할 일은 파일을 읽는 것 뿐이지 만 올바른 도구를 사용해야합니다.

스트림 조작기를 사용하여 파일을 읽으려면 스트림 I/O와 같은 것을 사용하는 경우 형식의 I/O를 고려해야합니다. 그러나 형식화 된 I/O를 원하지 않으면 형식화되지 않은 I/O가 필요합니다.

이 예제를 고려하십시오. 파일이 c:\temp\test.txt 인 경우 :

안녕하세요. 단지 포맷,

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 

헥스 번호와 표시되는 문자 데이터 저장 위치 :

#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; 
    } 
} 

당신은 출력이 나타납니다 :

... 그리고이 코드를 실행 다르게. "디 컴파일"단계 나 그와 같은 것이 없습니다. 이 시점에서해야 할 일은이 데이터를 vector<char>과 같은 위치에 저장하고 출력을 다시 포맷하여 16 진수 또는 ASCII가 아닌 이진 값으로이 값을 표시하는 것입니다. 나는 그것을 독자에게 연습으로 남겨 둘 것이다.

관련 문제