2009-12-24 5 views
0

현재 Mono Cecil을 사용하여 C# 프로젝트에서 데이터를 추출하고 있습니다. 이제 각 필드에서 필드를 읽거나 쓰는지 확인해야합니다.CIL 명령에서 필드를 읽거나 쓰는지 여부를 알려주는 방법은 무엇입니까?

CIL instruction에서 필드를 읽거나 쓰는 방법을 어떻게 알 수 있습니까?

나는 Eclipse의 JDT에서과 비슷한 Mono Cecil에있는 라이브러리가 의심 스럽기 때문에 왼쪽과 오른쪽을 추출 할 수 있습니다. 있다면 거기에서 일할 수 있습니다.

+0

그런데 ECMA의 CLI 사양을 사용하도록 권장합니다. http://www.google.com/url?q=http://www.ecma-international.org/publications/files/ECMA- ST/Ecma-335.pdf & ei = qxMzS_6SFpD-sQOA7JHBBA = X & n = nshc & resnum = 1 & ct = 결과 & cd = 1 & ved = 0CAoQzgQoAA & usg = AFQjCNHVmOmltbTSIZzP5GDNTq_FFJMKIg - 후자에는 구현 세부 사항이 있지만 탐색하기 쉬운 목차가 없어 매우 불편합니다. ECMA 사양은 I-III 파티션의 단일 파일이기도합니다. –

+0

사실 ECMA 사양이 있지만 파티션 III 만 필요하다고 생각했습니다. 그래서 나는이 qn에 붙이기위한 url로서 파티션 III을 가진 url을 검색한다. 내가 III을 제외한 다른 파티션에서 sth을 필요로한다는 것을 의미합니까? 다른 파티션을 조사해야합니까? – yeeen

+0

파티션 III은 CIL 명령어 세트이지만 파티션 I 및 II (기본 개념, CLR 유형 시스템 등을 정의 함)를 많이 참조합니다. 이전에 제공 한 링크는 3 개의 모든 파티션에 대한 링크입니다. –

답변

2

직접 필드 스토어에 대한 지침은 stfld이므로주의해야합니다.

필드는 간접적으로 포인터 (외부 주소는 *& 종류)를 통해 간접적으로 기록 될 수 있으므로 가장 일반적인 경우에는 감지 할 수 없습니다 (외부에서 포인터를 가져올 수 있음).

+0

"포인터가 외부에서 올 수 있음"이란 무엇을 의미합니까? u는 예를 줄 수 있습니까? 나는 약간의 abt 포인터를 알고 있지만 익숙하지 않다. – yeeen

+0

C# 코드를 고려하십시오.'unsafe void Foo (int * p) {* p = 123; }'. 이것은'Foo (& x.y)'('x'가 로컬'struct' 같은 경우)로 부를 수 있습니다. –

+0

ldfld와 stfld는 getters와 setter에서만 작동한다는 것을 알게되었습니다. 다른 읽기 및 저장 (포인터 제외)에 대해서는, ldsfld와 stsfld를 사용하는 것이 좋습니다. 나는 예를 들자면 U를 주었고, 메소드가 호출 될 때 ldflda를 얻었다. – yeeen