2011-07-05 11 views
8

아래와 같은 오류 및 경고 출력 PEVerify이 주어지면 문제가되는 클래스 및 인터페이스 이름을 어떻게 다시 추적 할 수 있습니까? 나는 컴파일러 저자 또는 일리노이 마술사가 아니라고 가정한다.PEVerify 오류 및 경고를 간단하게 디코딩 할 수 있습니까?

[MD]: Error: Class implements interface but not method (class:0x02000091; interface:0x06000169;method:0x00000000). [token:0x09000043] 
[MD]: Warning: MemberRef has a duplicate, token=0x0a0001ff. [token:0x0A000060] 
+0

컴파일러 작성자 또는 IL 해커가 아닌 경우 어떻게 이러한 문제가있는 어셈블리를 생성 했습니까? .NET 컴파일러는 모든 경우에 유효한 어셈블리를 생성합니다 (컴파일러 버그 ofc 부족) – thecoop

+0

@thecoop 원래 질문을 게시 한 이래로 이러한 오류가 타사 어셈블리에 있다고 판단했습니다. 어셈블리는 OSS 프로젝트 빌드이므로 여전히 추적해야합니다. – bentayloruk

+1

@thecoop이 오류는 [IHideObjectMember intellisense trick]을 구현할 때 발생합니다 (http://blogs.clariusconsulting.net/kzu/how-to-hide-system-object-members-from-your-interfaces/). 그것은 우리의 경우에 원인이며 우리는이 트릭을 사용하는 두 번째 어셈블리에서이를 확인했습니다 (Autofac 및 Moq). – bentayloruk

답변

11

ILDASM을 사용하고 해당 어셈블리를로드하십시오. 보기 -> 메타 정보 ->보기로 이동하십시오! 이렇게하면 사람이 읽을 수있는 버전의 어셈블리 메타 데이터를 보여주는 텍스트 뷰어가 열립니다. 관련 클래스, 인터페이스 및 메서드를 찾으려면 16 진수 식별자를 검색합니다 (단, "0x"부분은 건너 뜁니다).

+0

프로그래밍 방식으로이를 수행 할 수있는 방법이 있습니까? – BatteryBackupUnit

+1

이 정보가 들어있는 헤더 파일 인 PE 파일 형식은 잘 문서화되어 있으며 Windows SDK의 Windows 헤더 파일에 구조체가 정의되어 있습니다. 대부분이 PInvoke 매핑을위한 C# 구조체로 사용할 수 있습니다. 다음은 헤더의 다른 부분을 읽는 코드입니다. http://code.cheesydesign.com/?p=572 –