.NET 어셈블리의 "~"메타 데이터 헤더에서 정렬 된 비트 벡터 필드의 목적은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1619614

  •  06-07-2019
  •  | 
  •  

문제

Partition II 메타 데이터에 따르면, 유효한 필드는 CLR 메타 데이터 테이블이 .NET 실행 가능에 표시되는 비트 마스크라고 말하지만 "정렬 된"필드가 제공하는 것입니다. 그 중요성은 무엇이며, 내 자신의 .NET 휴대용 실행 가능 이미지를 만들 때이 필드로 무엇을 방출해야합니까?

도움이 되었습니까?

해결책

특정 메타 데이터 테이블이 정렬되었는지 여부에 관계없이 정렬 된 필드가 암시되는 것 같습니다 (유효한 비트 필드입니다).

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

다른 팁

편집 : 이것은 대답이 아닙니다. 나는 정렬 된 필드가 아닌 유효한 필드에 관한 질문을 잘못 읽었지만 답과 관련된 경우 여기에 남겨두고 있습니다.

당신이 말하는 "유효한"필드는 다음과 같습니다. 파티션 II, §24.2.6, 다음과 같이 관련 부분이 있습니다.

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

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

한동안 나는 그것이 0- 인덱스인지 1- 인덱스인지 확실하지 않았으므로 0- 인덱스를 가정했습니다. 그러나 모듈 테이블이 표 0x00이기 때문에 이제 0-Indexed임을 확실히 알고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top