2009-10-25 1 views
3

Partition II 메타 데이터에 따르면 유효한 필드는 .NET 실행 파일에있는 CLR 메타 데이터 테이블을 나타내는 비트 마스크입니다.하지만 "정렬 된"필드는 무엇인지 알 수 없습니다 - 그 의미는 무엇이며, .NET 이식 가능 실행 가능 이미지를 만들 때이 필드에 무엇을 내야합니까?.NET 어셈블리의 "~"메타 데이터 헤더에서 정렬 된 비트 벡터 필드의 용도는 무엇입니까?

답변

1

특정 메타 데이터 테이블이 정렬되어 있거나 정렬되지 않은 경우 정렬 된 필드가 힌트를 표시한다고 생각합니다 (올바른 비트 필드).

이렇게하면 런타임에 구현 된 데이터를 사용하여 테이블에서 직접 이진 검색을 수행 할 수 있습니다.

0

편집 :이, 나는 유효한 필드가 아닌 정렬 된 필드에 대한 것으로 질문에 대한 답변 오해되지 않지만, 나는 그것이 대답

받는 관련이 경우 여기를 떠납니다 다음과 같이 얘기 "유효"필드는 관련 부분, §24.2.6, Partition II에 설명되어 있습니다 :

유효한 필드는 각 테이블에 대한 특정 비트 세트가 64 비트 bitvector입니다 스트림에 저장된다. 테이블에 대한 인덱스의 매핑은 § 22의 시작 부분에 나와 있습니다. 예를 들어 DeclSecurity 테이블이 논리 메타 데이터에있는 경우 비트 0x0e를 Valid 벡터에 설정해야합니다. Valid에 존재하지 않는 테이블을 포함하는 것은 유효하지 않으므로 0x2c 이상의 모든 비트는 0이됩니다.

§22.2로 시작하는 섹션 22의 각 하위 섹션은 하나의 테이블을 설명하고 해당 비트 인덱스를 제공합니다. 예를 들어 §22.2의 제목은 "Assembly : 0x20"입니다. 즉, §22.2에 설명 된 조립품 테이블이 PE에있는 경우에만 Valid 필드에 비트 0x20을 설정해야합니다. 이것은 이 아니며Valid & 0x20 == 0x20을 의미하므로 Valid의 0x20th (즉, 32 번째) 비트를 설정해야한다는 것을 의미합니다 (즉, Valid & (1 << 0x20) == (1 << 0x20)).

잠시 동안 0 인덱싱인지 1 인덱싱인지 확실하지 않았으므로 0 인덱싱을 가정했습니다. 하지만 지금은 모듈 테이블이 테이블 0x00이기 때문에 그것이 0 인덱싱되었는지를 확실히 알고 있습니다.

관련 문제