최근 동적 방법을 위해 IL을 검사하기 위해 VS2010에서 ILVisualizer를 사용하기 시작했습니다. 그러나 일리노이 스트림에서 LocalVariable 정보를 추출하지 않습니다. 그래서 시도해 봅니다. (재미있게 배우고 좋은 학습 경험을 가지고 있기 때문에) 좋은 결과를 얻을 수 있기 때문에 좋은 결과를 얻을 수 있습니다.DynamicMethod의 LocalSignature : 비표준 유형 토큰을 읽으시겠습니까?
정적으로 컴파일 된 메서드의 경우 문제는 GetMethodBody()를 통해 메서드의 본문에 액세스하고 거기에서 로컬 변수를 가져올 수 있기 때문입니다.
그러나 DynamicMethod에서는 메서드 본문을 GetMethodBody()를 통해 사용할 수 없습니다. 내가 바이트 배열로 로컬 서명을 얻는 해결 방법을 발견하고 거기에서 CIL 스펙에 따라 메서드의 로컬에 대한 개수, 유형 및 인덱스를 추출 할 수 있습니다. 네이티브 형식 (short, byte, string ...)을 처리하는 동안 모두 잘됩니다.
로컬 변수가 클래스 유형 인 경우 로컬 서명 내의 ELEMENT_TYPE_CLASS 대신 ELEMENT_TYPE_INTERNAL (0x21) 플래그로 참조됩니다.
불행히도 ELEMENT_TYPE_INTERNAL (으)로 저장된 유형을 읽는 방법을 찾지 못했습니다. 그게 뭐예요? MS는 동적 방법에 대해 비표준 CIL을 사용합니까? 누구나 그 서명을 올바르게 읽을 수있는 방법을 알고 있습니까?
편집 나는 mscorlib.dll에 대한 몇 가지 소스 파일을 우연히 발견하고, 클래스가 실행시의 형태 일 때이 가능하게 일어나는 것을 SignatureHelper의 소스에서 발견했다. 나는 그것에 대해 조사 할 것이다 ...