2014-04-03 4 views
0

컴파일러가 동일한 .java 소스 파일을 사용하여 다른 .class 파일을 만들 수 있습니다. 방금 Ant 및 Eclipse로 .java 파일을 컴파일하려고 시도했지만 결과 파일 크기가 다르므로 해당 파일의 해시 값이 일치하지 않습니다.두 개의 .class 파일과 해시 값을 비교하십시오.

개미와 함께 빈 익명 내부 클래스가 생성 된 것을 발견했습니다. 그래서, 어떻게 해시 값이나 다른 것을 통해 다른 컴파일러의 .class 파일을 일치시킬 수 있습니까?

참고 : .class 파일을 .java로 다시 생성하면 해시 값이 일치합니다. 이것이 유일한 방법입니까?

+0

왜 클래스 파일을 비교해야합니까? 다른 컴파일러 설정 (예 : 최적화 수준, 디버그 정보 등)은 .class 파일을 변경할 수 있으므로 일치가 어려워집니다. 구체적으로 클래스 파일을 비교하여 보관하려는 것은 무엇입니까? –

+0

파일 재사용을 신속하게 감지하고 싶습니다. 분석 용. – Zyoo

답변

2

그럼 어떻게 다른 컴파일러의 .class 파일을 해시 값 또는 다른 어떤 항목과도 ​​일치시킬 수 있습니까?

간단히 말해서 쉬운 방법이 없다고 생각합니다. 서로 다른 컴파일러가 동일한 소스 코드에서 서로 다른 바이트 코드를 생성 할 수 있습니다.

그래도 문학을 공부할 가치가 있습니다. 빠른 Google 검색이 발견했습니다

A Plagiarism Detection Technique for Java Program Using Bytecode Analysis

정 훈 지, 균 우, 환 - GUE 조

ABSTRACT 대부분의 표절 탐지 시스템은 소스 코드의 유사성을 평가하고 표절 프로그램을 감지 한 쌍. 표절 탐지에서 소스 코드를 사용하면 소스 코드 보안이 심각한 문제가 될 수 있습니다. 소스 코드의 보안을 보호하기 위해 대상 코드를 기반으로 한 표절 검색을 사용할 수 있습니다. 본 논문에서는 소스 코드를 참조하지 않고 바이트 코드를 사용하는 자바 프로그램에 대한 새로운 표절 기법을 제안한다. 바이트 코드를 사용하는 표절 검색 절차는 두 가지 주요 단계로 구성됩니다. 먼저 메소드의 코드 영역을 분석하여 Java 클래스 파일에서 토큰 시퀀스를 생성합니다. 그런 다음 적응 로컬 정렬을 사용하여 토큰 시퀀스 간의 유사성을 평가합니다. 실험 결과에 따르면 소스 코드와 바이트 코드의 유사성 분포가 매우 유사하다는 것을 알 수 있습니다. 또한 소스 코드 쌍의 유사성과 바이트 코드 쌍의 유사성 간의 상관 관계는 일반적인 테스트 데이터에 대해 충분히 높습니다. 바이트 코드를 사용하는 표절 탐지 시스템은 소스 코드 비교에 의한 표절을 탐지하기 전에 사전 검증 도구로 사용할 수 있습니다.

Deducing Similarities in Java Sources from Bytecodes도 있지만 Java 용어 (1998)로 매우 오래되었습니다. 아이디어의 가치있는 원천이 될 수도 있습니다.

더 많은 자료가있을 것입니다. 이것은 2 분 만에 찾을 수있는 것입니다.

+0

고마워, 나는 실제로 코드 유사성 탐지를 만들고 싶지만, 해시 값을 먼저 사용하여 라이브러리 파일 유사성을 빨리 감지하여 추가 탐지에서 제외시킬 수 있습니다. 링크에 감사드립니다. – Zyoo

+1

@Zyoo : 지역적으로 민감한 해싱 스키마 (http://en.wikipedia.org/wiki/Locality-sensitive_hashing)가 없으면 해시가 유사성을 감지하는 데 적합한 도구라고 생각하지 않습니다. – NPE

관련 문제