2015-02-02 6 views
1

C# 프로그램 컴파일을 읽으려면 두 단계가 필요합니다.MSIL에 대해 혼란 스럽습니다.

먼저는 MSIL을 생성 한 다음은 기계 코드를 생성합니다. 그래서 컴파일의 첫 번째 단계 (MSIL)에서 생성 된 파일을보고 싶습니다. 나는 DLL 파일을 생각하고있다

는 MSIL 코드를 포함하는 파일입니다,하지만 난 내가 잘못 생각합니다.

+0

'corflags.exe'를 사용할 수 있습니다. 파일에 유효한 관리 헤더가없는 경우 오류를 반환합니다. – leppie

+0

구체적으로 묻고있는 것은 무엇입니까? 몇 가지 질문이 있습니다. – rossipedia

+0

나는 C# 프로그램 컴파일을 두 단계로 읽었습니다. 먼저 MSIL을 생성 한 다음 기계 코드를 생성합니다. 그래서 나는 컴파일의 첫 번째 단계에서 생성 된 파일을보고 싶다. 나는 dll 파일이 MSIL 코드가 들어있는 파일이라고 생각했지만 잘못 생각한다. 제발 저를 계몽하십시오. – Sonu

답변

4

당신 말이 맞습니다. .NET DLL 및 EXE (.NET에서 어셈블리라고 함)는 MSIL이 포함 된 어셈블리입니다. DLL은 .NET 형식과 다른 형식을 가질 수 있습니다. 따라서 .NET 어셈블리에는 헤더를 인식 할 수있는 헤더가 있습니다. corflags.exe을 사용하여 DLL/EXE가 .NET DLL/EXE인지 확인할 수 있습니다.

어셈블리의 IL 코드는 CLR (공용 언어 런타임)에 의해 해석되며이 코드는 컴퓨터 코드로 변환됩니다. 이 단계는 런타임시 JIT'ter가 수행했기 때문에 실제로 볼 수 없습니다 (또는 ngen.exe을 사용하여 어셈블리를 미리 컴파일하고 생성 된 파일을 읽어야합니다).

+0

LinqPad 실제로 코드에 일리노이 생성합니다 이론적으로 모호하지 않은 코드로 컴파일하면 "MSIL"에서 대부분을 얻을 수 있습니다. –

+0

사실이지만 두 번째 단계는 아닙니다. Reflection과 ILDASM은 첫 번째 단계에서 사용할 도구입니다. –

+0

"두 번째 단계가 아니라"는 의미는 무엇입니까? 코드를 난독 화하지 않은 한 그것을 반영하고 다시 컴파일하면됩니다. –

3

.net에는 여러 언어 (C#, VB.net 등)가 있습니다.

C# 프로젝트 라이브러리를 컴파일하면 IL 코드가 포함 된 dll이 출력됩니다.

VB.net이 IL로 컴파일되므로 C#이 IL로 컴파일되므로 두 언어로 코드를 "혼합"할 수 있습니다.

이 IL은 런타임에 JIT 컴파일러를 사용하여 기계 코드로 컴파일됩니다 (CLR에 대해 읽음).

넌 반사기를 사용 DLL을 반영하여 IL 코드를 볼 수있다.

here 자세히 알아보십시오.

관련 문제