2010-11-22 2 views
3

"물론 저자의 의도와는 다른 방식으로 프로그램의 동작에 영향을 미치는 방법"(wiki)은 대부분 상식입니다..net의 코드 삽입 (프로그래밍 기술)은 무엇입니까?

그런 다음 기술을 사용하는 모든 리플렉션 및 유형 구성 자도 "코드 삽입"으로 이름을 지정할 수 있지만 아무도이를 수행하지 않습니다.

"코드 삽입"이 "런타임"에 관한 것이라고 생각할 때 : 재미있는 데이터를 얻기 위해 다른 프로세스에서 스레드를 시작하는 것처럼 Reflexil이이를 이해하는 방법에 놀랐습니다. "C# 명령어를 desing에있는 IL로 변환하십시오. 시간을 절약하고 편집 된 어셈블리를 저장하고 이전 어셈블리를 새 것으로 바꿉니다. "(내가 놓친 10 %).

그래서 지금은 "코드 삽입"용어로 .NET의 어떤 기술이 명명되었는지 흥미 롭습니다.

BTW. 나는 매우 흥미 롭다. 즉 매우 개인적이고, 여러 번 중첩 된, 시스템 클래스의 "가상 메소드 테이블"에서 "가상 메소드에 대한 포인터"를 런타임에 내 자신의 메소드에 대한 포인터로 대체하는 것이 가능하다. 내 이해에서 순수한 코드 주입.

답변

4

.NET에서의 코드 삽입은 매우 어렵습니다. 대부분의 코드는 마지막 순간까지 존재하지 않기 때문입니다. 실행을 시작하기 전에 JIT 컴파일러가 생성 한 몇 초.

실용적인 접근법은 예를 들어 AOP에서 일반적으로 사용되는 IL 재 작성을 사용합니다. 이것은 전에 오프라인으로 발생하고 전에 프로그램이 실행되기 시작합니다. 이것은 실제로 더 이상 '주입'이 아니므로 디스크에서 프로그램을 실제로 변경해야합니다.

인라인 IL 재 작성 기술이 있으며 관리되지 않는 프로파일 러 인터페이스를 사용합니다. 상당히 실용적이지 않은 접근법을 문서화 한 잡지 기사는 available here입니다. 꽤 오래된 데, 그 이후로 프로파일 러 API가 상당히 바뀌 었습니다. 이것을 사용하는 도구에 대해 들어 본 적이 없습니다.

+0

슈퍼 대답. 고마워요. –

1

Aspect-Oriented Programming (AOP)은 메소드 삽입을 가로 채기 위해 코드 삽입을 사용합니다.

1

"코드 삽입"이라고 들으면 나는 그들이 Inversion of Control에 대해 이야기하고 있다고 가정하는 경향이 있습니다. .Net의 좋은 예가 Ninject 프레임 워크입니다.

관련 문제