2012-11-24 3 views
1

외부 .exe 파일의 바이트를 모두 저장하고 FileOutputStream/BufferedOutputStream을 사용하여 현재 작성중인 다른 .exe 파일에 다시 작성합니다.Java를 사용하여 외부 .exe 파일을 작성하는 방법

바이트가 잘 작성되고 두 번째 프로그램이 원하는 위치에 만들어 지지만 파일을 실행하면 올바른 .exe 파일이 아니거나 올바른 32/64 비트 응용 프로그램이 아니라고 표시됩니다.

제대로 포장되고 생성되지 않았으므로 추측합니다.

어떻게하면 실행 파일이되고 첫 번째 파일과 동일하게 작동합니까?

p.s 파일을 복사 할 수 없습니다. 왜냐하면 결국 바이트를 암호화하여 파일에 쓰려고하기 때문에 사용할 수 있기를 원하기 때문입니다.

+1

잘 동작

무엇을하기위한 것이 필요합니까? – AlexWien

+0

나는 울부 짖는 소리를 내고있다. 나는 이것을 어떻게하는지 알 필요가있다. – user1848712

+0

cmd 프롬프트 "fc old.exe new.exe"에서 실행하면 어떻게됩니까? 새 .exe 실제로 같은 바이트가 정확히 있습니까? –

답변

0

모든 바이트가 동일하면 실행됩니다. 원본 파일이 실행되고 복사본이없는 경우 일부 바이트가 달라야합니다. 그것은 포장과 아무 관련이 없습니다. 바이트 변수를 사용하여 읽은 데이터를 저장하는 중일 수 있습니다. 그러지 마. int를 사용하십시오. 바이트 변수를 올바르게 사용하지 않으면 자동 부호 확장으로 인해 문제가 발생할 수 있습니다. 이 날

import java.io.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     BufferedInputStream in = new BufferedInputStream(new FileInputStream("a.exe")); 
     BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("b.exe")); 
     int data = in.read(); 
     while(data >= 0) { 
      out.write(data); 
      data = in.read(); 
     } 
     in.close(); 
     out.close(); 
    } 
} 
관련 문제