2010-07-14 3 views
0

주어진 파일이 클래스 파일인지 여부를 결정해야합니다. 확장명을 .exe/.xml 또는 다른 파일로 변경한다고 가정합니다. 클래스 파일이 다르게 파싱되고 다른 파일로 파싱되는 경우 해당 파일이 해당 방식으로 파싱되는지 여부를 결정해야합니다.주어진 파일을 결정하는 방법은 클래스 파일입니까?

클래스 파일 형식은 어떻게 읽을 수 있습니까?

+1

-1 - 그냥 "자바"로 질문을 태그, 자바 클래스 파일을 읽기에 대한 질문을 위해 ... 모든 사람들이 C#/.NET으로 코딩 된 솔루션을 원한다는 것을 알기를 기대합니다. –

+0

@Stephen C, 나는 (내가 할 수있는 한) 당신의 의견을 슬퍼하고, 무언가에 대해 불평하고, 충분한 능력이있을 때 그것을 고치지 않을 것이다. 나는 투표가 downvoted 기다려야 할 것 같아요;) – OscarRyz

답변

4

나는 이것을 BCEL라고 생각합니다. 지금 확인 중 ...

편집 : 예, 있습니다. ClassParser 클래스를 사용할 수 있습니다. 파일이 실제로 Java 클래스 파일이 아니면 parse 메소드는 ClassFormatException을 던집니다.

편집 : 좋아, C#에서 알아야합니다. 세 가지 옵션 :

  • 포트 BCEL C 번호 (분명히 당신이 필요로하는 단지 비트)
  • 시도하는 헤더 0xcafebabe가 그에두고

    • 확인 여부 (이 있습니다 꽤 좋은 발견) J #을 사용하여 BCEL을 .NET으로 직접 컴파일 - Java 1.1.4 이상을 사용하지 않는 경우에만 작동합니다. 그러나 일 수 있습니다. 정말 오래된 버전의 BCEL이이 점에서 훌륭하게 작동합니다. 물론 지금 중단 된 J #도 가져와야합니다.

    CAFEBABE 테스트는 매우 간단합니다 :

    public bool IsProbablyJava(string file) 
    { 
        using (Stream stream = File.OpenRead(file)) 
        { 
         return stream.ReadByte() == 0xca && 
           stream.ReadByte() == 0xfe && 
           stream.ReadByte() == 0xba && 
           stream.ReadByte() == 0xbe; 
        } 
    } 
    

    그것은 정확히 꽤 ...뿐만 아니라 BinaryReader 등으로 대안이 아닙니다.

  • +0

    Java가 아닌 C# .NET에서 확인하려면이 코드가 필요합니다. – Usman

    +0

    하지만 질문을 "java"로 태그 지정했습니다. 그래서 당신은 자바 코드를 읽는 C# 응용 프로그램을 코딩하거나 C# 코드를 읽는 C# 응용 프로그램을 코딩하고 있습니까? – aberrant80

    +0

    아마 자바 관련 질문 때문입니다. 그러나 프레임 워크 (현재 내가 작업하고있는)는 .NET env로 작성하여 파일을 처리합니다. 네가 내 요점을 가지고 있다고 생각해. – Usman

    2

    class file format은 클래스 파일의 처음 4 바이트가 CA FE BA BE이 될 것이므로이를 확인할 수 있습니다. 귀하의 요구 사항에 따라, 그것은 충분히 간단한 점검 일 수도 있습니다.

    대안 (및 더 나은) 해결책으로, 파일을로드하려고 시도하십시오. 실패하면 클래스 파일이 아닙니다. 성공하면 그때가되었습니다.

    +2

    다른 방법을주의하십시오. 그것은 솔직한 아이디어입니다. 그러나 클래스에는 의도하지 않은 부작용이있는 정적 초기화 프로그램이있을 수 있습니다. – emory

    9

    자바 .class 파일은 HEX로 시작 : 좋은 시작이다 0xCAFE 0xBABE :

    CAFE BABE http://a.imageshack.us/img820/2908/capturadepantalla201007k.png

    +0

    감사합니다. 그러나 어떤 도구를 사용하여 화면을 짧게 붙여 넣었습니까? 그것의 디버거 또는 dissassembler 일종의 경우,이 – Usman

    +4

    헥스 - 편집기를 어떻게 알게 해주지. – aioobe

    +0

    @Usman, 그 특별한 스크린 샷은 gVim이지만 aioobe가 말한 것처럼 "괜찮은"텍스트 편집기가 있어야합니다. – OscarRyz

    관련 문제