2011-03-04 2 views
1

리플렉션 (또는 다른 방식)을 통해 코드가 스레드를 생성하는지 여부를 확인하는 것과 같은 유효성 검사 요구 사항을 적용하기 위해 일부 코드를 "감사"할 수 있는지 파악하려고합니다 (System.Threading .Thread) 또는 다른 BCL을 사용합니다. 코드가 이미 dll로 컴파일되어 있다고 가정합니다. 감사!C# 리플렉션 및 감사 유형

+0

모두에게 큰 피드백, 감사합니다! – user644107

+0

fxcop을 시도했지만 무인 설치가 필요하므로 gendarme를 사용하여 종료되었습니다. – user644107

답변

0

반성은 회원의 본문의 검사를 허용하지 않으며 서명 만 허용합니다. 즉, 특정 메소드 또는 속성 이 무엇을하는지이 무엇인지에 대해 알려주지 않습니다.

당신이 무엇을했는지 알아 보려면 컴파일 된 .dll 또는 .exe를 IL로 전환 한 다음 IL을 찾아보고 내가 처리하는 대상이 무엇인지 확인해야합니다 (예 : ildasm.exe).

2

FxCop을 살펴보십시오. 컴파일 된 이진 파일 (dll 또는 exe)을로드하고 컴파일 된 IL에 대해 유효성 검사 및 준수 확인을 수행 할 수 있습니다.

"= new Thread()"의 사례를 잡기 위해이 경우 할 수있는 자신 만의 규칙을 작성할 수 있습니다.

1

다른 사람들은 반사광이 tpyes의 메타 데이터만을 설명하기 때문에 도움이되지 않을 것이라고 말했습니다.

그러나, Mono.Ceci1 프로젝트는 실제로 조립품에서 유형의 IL (중급 언어)을 실제로 확인하는 런타임 방법입니다. 모노 프레임 워크의 제품이지만 Microsoft CLR과 호환됩니다.

2

일리노이에 정통한 사람이라면 반성하여이 작업을 수행 할 수 있습니다.

MethodBody mb = this.GetType().GetMethod("Method", BindingFlags.Default).GetMethodBody(); 
    byte[] bytes = mb.GetILAsByteArray(); 

아마도 가치가있는 것보다 더 많은 문제가있을 것입니다. 결과 IL을 파싱해야합니다.

일리노이 구문 분석기 (다소 날짜가 있음) : http://www.codeproject.com/KB/cs/sdilreader.aspx : OpCodes 목록을 생성합니다 (스레드 인스턴스화를위한 OpCodes.Newobj를 찾으십시오).

0

Reflection은 MethodBase.GetMethodBody을 통해 방법의 본문을 검사 할 수 있으므로 검사 할 때 MethodBody이됩니다.

그러나 외부 메소드 호출과 그들이 수행을 찾기 위해 끝까지 시작을 분석해야 당신이 바이트 배열에 원시 IL 다루고있는이 수준에서 등

그래서 그것은하지 않습니다 예쁘거나 쉽지만 확실히 가능합니다.